背景:
自己拥有一块开发板,但是苦于上面没有ssh,比较不方便。正好趁这个机会,移植ssh。我们使用的ssh是openssh。
host平台 :Ubuntu 18.04
arm平台 : S5P6818
openssh :4.6p1
openssl :0.9.8e
zlib :1.2.11
arm-gcc :4.8.1
主机准备:
为了方便管理,创建有关的目录
mkdir sshcdssh
mkdir compressed install source
下载有关的源码:
cd compressed
#下载zlib:wget -c https://www.zlib.net/zlib-1.2.11.tar.gz
#下载ssl:wget -c https://www.openssl.org/source/openssl-0.9.8e.tar.gz
#下载ssh:wget -c http://mirrors.mit.edu/pub/OpenBSD/OpenSSH/portable/openssh-4.6p1.tar.gz
解压下载的包
tar -xf openssh-4.6p1.tar.gz -C ../sourcetar -xf openssl-0.9.8e.tar.gz -C ../sourcetar -xf zlib-1.2.11.tar.gz -C ../source
编译:cd ../source
zlib
./configure --prefix=/home/xx/arm/ssh/install/zlib-1.2.11
# vi Makefile
修改对应的变量值 ,注意是加入前缀,如果变量有任何其他内容,那么保持对应的项目不变
CC=arm-none-linux-gnueabi-gcc
AR=arm-none-linux-gnueabi-ar rc
CPP =arm-none-linux-gnueabi-gcc ...
LDSHARED=arm-none-linux-gnueabi-gcc ...
make && make install
openssl
# xx @ xx in ~/arm/ssh/source/openssl-0.9.8e [15:03:51]
$ ./Configure --prefix=/home/xx/arm/ssh/install/openssl-0.9.8e os/compiler:arm-none-linux-gnueabi-gcc
$ make && make install
编译和安装openssl时出错,POD document had syntax errors
错误信息:
installing man1/smime.1
smime.pod around line 272: Expected text after =item, not a number
smime.pod around line 276: Expected text after =item, not a number
smime.pod around line 280: Expected text after =item, not a number
smime.pod around line 285: Expected text after =item, not a number
smime.pod around line 289: Expected text after =item, not a number
POD document had syntax errors at /usr/bin/pod2man line 71.
make: *** [install_docs] 错误 255
原因分析:这是由于OpenSSL 1.0.1e 与 perl5.18 不兼容。
解决方法:
1. 安装perl 5.16 可以兼容,安排低版本perl 5.16可以解决问题。
2. 让 pod2man 无法被访问:
sudo rm /usr/bin/pod2man
或
sudo mv /usr/bin/pod2man /usr/bin/pod2man_bak
openssh
# xx @ xx in ~/arm/ssh/source/openssh-4.6p1 [15:13:46]
$
./configure --host=arm-none-linux-gnueabi --with-libs
--with-zlib=/home/xx/arm/ssh/install/zlib-1.2.11
--with-ssl-dir=/home/xx/arm/ssh/install/openssl-0.9.8e
--disable-etc-default-login CC=arm-none-linux-gnueabi-gcc
AR=arm-none-linux-gnueabi-ar
如果出现以下某个报错,请注意zlib的install路径 和 OpenSSL的install路径 是否正确
configure配置openssh的时候出错:configure: error: *** zlib missing - please install first or check config.log ***
configure: error: *** Can't find recent OpenSSL libcrypto (see config.log for details)
$ make
注意:openssh不需要make install
开发板准备:
新建以下目录
mkdir -p /usr/local/bin/
mkdir -p /usr/local/sbin/
mkdir -p /usr/local/etc/
mkdir -p /usr/local/libexec/
mkdir -p /var/run/
mkdir -p /var/empty/
拷贝:
从PC机上将以下文件拷贝到目标板Linux系统中
PC机 /work/ssh/source/openssh-4.6p1/ 目录下的
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 拷贝到目标板/usr/local/bin
#cp scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan ~/nfs/ulb/
moduli ssh_config sshd_config拷贝到目标板 /usr/local/etc
# cp moduli ssh_config sshd_config ~/nfs/ule
sftp-server ssh-keysign 拷贝到目标板 /usr/local/libexec
# cp sftp-server ssh-keysign ~/nfs/ull
sshd 拷贝到目标板 /usr/local/sbin/
# sshd ~/nfs/uls
生成Key文件
在PC机 /work/ssh/source/openssh-4.6p1/ 目录下运行:
ssh-keygen -t rsa -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 ""
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
将生成的 ssh_host_*_key这3个文件copy到目标板的 /usr/local/etc/目录下
修改目标板passwd文件
在/etc/passwd 中添加下面这一行
cp /etc/passwd /etc/passwd_bak
echo "sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin" >> /etc/passwd
只需要运行一次 /usr/local/sbin/sshd 此后即可使用远程登录
如果连接不上,请直接运行 /usr/local/sbin/sshd 查看是什么原因
有提示 动态链接库 找不到的(工具链的动态链接库)
有提示 ssh_host 文件找不到的 生成即可