Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263563
  • 博文数量: 94
  • 博客积分: 526
  • 博客等级: 中士
  • 技术积分: 687
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-09 10:02
文章存档

2014年(1)

2013年(10)

2012年(83)

分类: LINUX

2013-02-17 09:12:46

OpenSSH移植到ARM Platform

 

声明
    本人在本博客的所有内容(包括但不限于文字、图表、商标、标识、按钮图标、图像、声音片段、数据及软件等)均基于知识共享目的,除知识的相授,不接收任何利益;如若发现本博客有任何不慎涉及您版权利益的内容,请及时告知,本人将第一时间予以处置。

源码包

名称

版本

OpenSSH

6.0p1

openssh-6.0p1.tar.gz

OpenSSL

1.0.1c

openssl-1.0.1c.tar.gz

ZLIB

1.2.3

zlib-1.2.3.tar.gz

移植

准备

注意:笔者使用的交叉编译工具链为arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2010.09-50) 4.5.1

在主机中新建一个openssh目录,存放下载的源文件压缩包,并在该文件夹下解压。

# mkdir –p openssh

# tar -xz –f openssh-6.0p1.tar.gz  --解压OpenSSH源码包

# tar -xz -f zlib-1.2.3.tar.gz       --解压ZLIB源码包

# tar –xz -f openssl-1.0.1c.tar.gz   --解码OpenSSL源码包

openssh目录下创建install目录,用于存放生成文件和安装目录。

# mkdir –p install

交叉编译步骤

ZLIB

(1)编译zlib

# cd (全路径名)/openssh/zlib-1.2.3

# ./configure --prefix=(全路径名)/openssh/install/zlib-1.2.3

修改zlib-1.2.3目录下Makefile

在第一行添加如内容:

CROSS=arm-none-linux-gnueabi-

CC=gcc 改为

CC=$(CROSS)gcc 

LDSHARED=gcc 改为

LDSHARED=$(CROSS)gcc

CPP=gcc -E改为

CPP=$(CROSS)gcc -E

AR=ar rc 改为

AR=$(CROSS)ar rc

# make

# make install

经过编译和安装之后,编译产生的ZLIB库和头文件就安装在了“(全路径名)/openssh/install/zlib-1.2.3”目录下。

OpenSSL

# cd (全路径名)/openssh/openssl-1.0.1c

# ./Configure –prefix=(全路径名)/openssh/install/openssl-1.0.1c

 os/compiler:arm-none-linux-gnueabi-gcc

# make

# make install

经过编译和安装之后,编译产生的OpenSSL库和头文件就安装在了“(全路径名)/openssh/install/openssl-1.0.1c”目录下。

OpenSSH

# cd (全路径名)/openssh/openssh-6.0p1

# ./configure 

--host=arm-linux 

--with-libs 

--without-pam 

--with-zlib=/home/Archer/Desktop/openssh/install/zlib-1.2.3

--with-ssl-dir=/home/Archer/Desktop/openssh/install/openssl-1.0.1c 

--disable-etc-default-login 

CC=arm-none-linux-gnueabi-gcc 

AR=arm-none-linux-gnueabi-ar

# make

# make install

至此,OpenSSH的编译完成。

OpenSSH布局到ARM

将 openssh-6.0p1目录下的 sshd复制到目标板的/usr/local/sbin目录;

将 openssh-6.0p1目录下的scpsftpsshssh-addssh-agentssh-keygenssh-keyscan ssh-rand-helper复制到目标板的/usr/local/bin目录;

openssh-6.0p1目录下的sftp-serverssh-keysign复制到目标板的/usr/local/libexec目录;

openssh-6.0p1目录下的sshd_configssh_config moduli拷贝到目标板的/usr/local/etc目录;

在目标板上创建SSHD工作所需目录和用户;

# mkdir /var/empty

# chown root:root /var/empty

# chmod 755 /var/empty

# addgroup sshd

# adduser -G sshd -g 'sshd privsep' -h /var/empty -s /bin/ssh sshd

在目标机或者主机上,产生证书/密码对等。

# ssh-keygen -t rsa1 -f ssh_host_key -N ""

# ssh-keygen -t rsa -f ssh_host_rsa_key -N ""

# ssh-keygen -t dsa -f ssh_host_dsa_key -N ""

产生的6个文件ssh_host_dsa_keyssh_host_dsa_key.pubssh_host_keyssh_host_key.pubssh_host_rsa_keyssh_host_rsa_key.pub需要复制到目标板得/usr/local/etc目录。

运行/usr/local/sbin/sshd即可开启SSH服务。

参改

笔者使用的Busybox版本为1.17.3

Busybox注意

编译Busybox时,Login/Password Management Utilities---> [ ]Use internal password and group functions rather than system functions此项不要选。

/etc/passwd,该文件要特别关注,因为OpenSSH(SSHD)对用户管理校验要求很严,所以Busybox添加的用户基本是不符合要求的,主要表现为密码失效等,要手动修改,示例如下:

使用Busybox添加用户时,/etc/shadow文件大概形式如下:

# cat /etc/shadow

root:$1$m.jegaqA$vA.rBTVryyUAcRvyZ2gOL1:0:0:99999:7:::

telnetd:$1$N4uZUEcU$yotoDExxgGXs6PE7PQuIR1:0:0:99999:7:::

honey:$1$SwtHyL/h$MsEX6Vnqz/qhwDsivDqD20:0:0:99999:7:::

sshd:$1$elylgRon$FOHgkwpPMcNI5s.iL8ZS/.:0:0:99999:7:::

这样的话,使用SSH登录就会出现用户登录失败,提示诸如“WARNING: Your password has expired. You must change your password now and login again!”等等。

需要手工修改,大致如下:

# cat /etc/shadow

root:$1$m.jegaqA$vA.rBTVryyUAcRvyZ2gOL1:15695:5:99999:7:5:20000:

telnetd:$1$N4uZUEcU$yotoDExxgGXs6PE7PQuIR1:15695:5:99999:7:5:20000:

honey:$1$SwtHyL/h$MsEX6Vnqz/qhwDsivDqD20:15695:5:99999:7:5:20000:

sshd:$1$elylgRon$FOHgkwpPMcNI5s.iL8ZS/.:15695:5:99999:7:5:20000:

阅读(3610) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~