将Openssh 移植到ARM Linux目标板
下载最新版本的openssh-6.0p1 openssl-2.0.1 和 zlib-1.2.7 最后一步配置ssh出错 使用低版本的ssh和
ssl(zlib-1.2.7可以使用)原因不明
最终使用版本:
openssh-4.6p1
openssl-0.9.8e
zlib-1.2.7
源码下载地址:
openssh
openssl
zlib
(一) zlib openssl openssh交叉编译 (交叉编译器为 arm-hismall-linux-gcc)
1 下载源码包,地址如下:
openssh
openssl
zlib
2 交叉编译
在/work目下面创建ssh目录
# mkdir /work/lib ----〉共享库目录,通过nfs挂载
# mkdir /work/ssh -----〉工作目录
# cd /work/ssh
# mkdir compressed install source -----〉compressed 用于存放源码包
Install 软件安装目录
Source 源码包解压目录
#mv tarpakgs/openssh-4.6p1.tar.gz /work/ssh/compressed
#mv tarpakgs/openssl-0.9.8e.tar.gz /work/ssh/compressed
#mv tarpakgs/zlib-1.2.7.tar.tar /work/ssh/compressed
交叉编译 zlib
# cd /work/ssh/compressed/
# tar xvf zlib-1.2.7.tar.tar -C ../source
# cd ../source/zlib-1.2.7
# ./configure --prefix=/work/ssh/install/zlib-1.2.7
# vim Makefile
CC=arm-hismall-linux-gcc
AR=arm-hismall-linux-ar rc
CPP =arm-hismall-linux-gcc -E
LDSHARED=arm-hismall-linux-gcc
(把gcc给改为arm-hismall-linux-gcc,ar改为arm-hismall-linux-gcc)
# make
# make install
交叉编译openssl
# cd /work/ssh/compressed/
# tar zxvf openssl-0.9.8e.tar.gz -C ../source
# cd ../source/openssl-0.9.8e
# ./Configure --prefix=/work/ssh/install/openssl-0.9.8e os/compiler:arm-hismall-linux-gcc
如果报错:则修改Makefile文件
#vim Makefile
(将gcc给改为arm-hismall-linux-gcc,ar改为arm-hismall-linux-gcc)
# make
# make install
交叉编译openssh
# cd /work/ssh/compressed
# tar zxvf openssh-4.6p1.tar.gz –C ../source
# cd ../source/ openssh-4.6p1
#./configure --host=arm-9tdmi-linux-gnu --with-libs --with-zlib=/work/ssh/install/zlib-1.2.3
--with-ssl-dir=/work/ssh/install/openssl-0.9.8e --disable-etc-default-login CC=arm-hismall-
linux-gcc AR=arm-hismall-linux-ar
#make
# cd ../source/ openssh-4.6p1
(二) 安装
(1) 将openssh-4.6p1目录下的 sshd 拷贝到 目标板的/usr/sbin目录下
(2) 再copy scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 到目标
板/usr/local/bin目录下
copy sftp-server ssh-keysign 到/usr/local/libexec
(3) 在目标板下:
mkdir -p /usr/local/etc/ ,然后将openssh下的sshd_config,ssh_config 拷贝到该目录下
mkdir -p /var/run;
mkdir -p /var/empty/sshd
chmod 755 /var/empty
(4) 添加用户:
将主机上 /etc/目下的 passwd, shadow, group 三个文件copy到目标板的 /etc目录下, 同时记得将
passwd的最后 /bin/bash 该为 /bin/sh (将原passwd, shadow, group做副本)
( 其实可以删除不需要的一些用户。
这一步也可以这样,在目标板的passwd中添加sshd用户:
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
在shadow中也添加对应的项就行了:
sshd:!:14069:0:99999:7:::)
(5)libz.so.1.2.7 拷贝到目标板 /usr/local/lib/(可能是/lib)目录下
然后建立软连接
ln -s libz.so.1.2.7 libz.so.1
(6) 在目标板中生成key文件
#cd /usr/local/bin
#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_..文件: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
将生成的6个文件拷贝到/usr/local/etc
#cp /usr/local/bin/ssh_host_* /usr/local/etc
(三) 测试
目标板中启动ssh
(出现错误:sshd re-exec requires execution with an absolute path;运行方式不对,应采用
下面的运行方式)
# /usr/sbin/sshd
(出现错误:去ssh_config或sshd_config注释掉相关代码行)
ps ax 查看目标板是否有sshd的进程,有则运行成功
主机连接目标板
#ssh 192.168.*.*
(出现错误:登陆输入密码后提示输入新密码;(1)更改系统时间到当前时间,在目标板重新生成ssh_host_..文件.(2)更改拷贝过来的passwd group shadow文件; 具体错误原因不明)
输入用户名密码
连接成功