OpenSSH移植到ARM Platform——特指启动SSHD服务
源码包 www.zhishiwu.com
名称
版本
包
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。 www.zhishiwu.com
在主机中新建一个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”目录下。 www.zhishiwu.com
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板
u 将 openssh-6.0p1目录下的 sshd复制到目标板的/usr/local/sbin目录;
u 将 openssh-6.0p1目录下的scp、sftp、ssh、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan 和ssh-rand-helper复制到目标板的/usr/local/bin目录;
u 将openssh-6.0p1目录下的sftp-server和ssh-keysign复制到目标板的/usr/local/libexec目录;
u 将openssh-6.0p1目录下的sshd_config、ssh_config 和moduli拷贝到目标板的/usr/local/etc目录;
u 在目标板上创建SSHD工作所需目录和用户; www.zhishiwu.com
# 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
u 在目标机或者主机上,产生证书/密码对等。
# 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_key、ssh_host_dsa_key.pub、ssh_host_key、ssh_host_key.pub和ssh_host_rsa_key、ssh_host_rsa_key.pub需要复制到目标板得/usr/local/etc目录。
u 运行/usr/local/sbin/sshd即可开启SSH服务。
参改
笔者使用的Busybox版本为1.17.3。
Busybox注意
u 编译Busybox时,“Login/Password Management Utilities---> [ ]Use internal password and group functions rather than system functions”此项不要选。
u /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!”等等。
需要手工修改,大致如下: www.zhishiwu.com
# 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: