Openssh arm移植经验记录
参考资料:
https://blog.csdn.net/yasirliberty/article/details/51274971
https://blog.csdn.net/zhongruixian/article/details/21076405
https://blog.csdn.net/shjhuang/article/details/56830864
https://blog.csdn.net/ygy6146/article/details/52453490
由于公司产品被安全扫描到有ssh安全漏洞,发现版本还是4.6,因此决定升级到7.7,参考了网上的资料,经过了无数失败和重启,总算搞定了,记录如下:
升级过程基本同参考资料的描述,按顺序安装zlib,openssl和openssh
1.下载zlib-1.2.3.tar.gz
https://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.3/zlib-1.2.3.tar.gz
2. 下载openssl-1.0.2k.tar.gz
https://www.openssl.org/source/openssl-1.0.2k.tar.gz
3. 下载
http://mirrors.evowise.com/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz
一、交叉编译软件
安装zlib很顺利,按照文档一步步做就好了
./configure --shared --prefix=/root/temp/bin/zlib(这里是你要安装的目录)
进入Makefile里,把
将CC,CPP,AR,LDSHARED这几个的值加上前缀arm-linux-gnueabihf-
(这里要说一点,arm-linux-gnueabihf-gcc这个我没安装,一开始的机器上少了一个ar,openssl编译的时候一直不成功,后来偷懒,换了个有这个环境的机器)
编译,make;make install
二、openssl
安装openssl就比较痛苦,折腾了一天,先用最新的1.1.1版本,死活编译不通过,最终换成1.0.2p,经过反复测试,总算成功了,而且因为configure参数不对,导致openssh编译配置文件无法生成,后面反复编译了几次
./Configure --prefix=/root/temp/bin/openssl os/compiler:/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf-gcc
注意:这个 --fPIC一定要加,不然后面openssh编译会出错,我在这里卡了很久
编译,make;make install
三、openssh
这个也是反复编译了很久,开始一直不能生成makefile文件,不得已,我只有通过sh -x 调试模式分析,最后修改configure文件里的内容,才完成了配置文件的生成
修改的内容是:要把配置生成脚本里的/usr/local/ssl内容替换成你自己已经编译好的openssl目录,我这里是/root/temp/bin/openssl ,感觉下面语句了ssl-dir没起作用
./configure --host=arm-linux-gnueabihf --with-ssl-dir=/root/temp/bin/openssl --with-zlib=/root/temp/bin/zlib --prefix=/usr/local --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar
这里prefix也坑了我一把,编译好的文件放在板子上,提示找不到对应目录下的sshd_config,只好修改prefix,重新编译一遍
编译:make,不用make install,因为我们不是升级ubuntu的openssh
四、移植
这个相对简单,按照文档说明,把几个需要的文件cp到板子上就好了,可以自己做个脚本,方便后面批量升级
scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan 拷贝到目标板/usr/sbin
sshd_config拷贝到目标板/usr/local/etc
sftp-server ssh-keysign 拷贝到目标板 /usr/libexec
sshd 拷贝到目标板 /usr/sbin/
在板子/usr/local/etc目录下运行:
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-keygen -t dsa -f ssh_host_ed25519_key -N “”
修改目标板passwd文件(这步我没做,因为原来就有)
在/etc/passwd 中添加下面这一行
sshd❌74:74:Privilege-separatedSSH:/var/empty/sshd:/sbin/nologin
五、验证
做完这些,先/sbin/sshd重启sshd,验证移植是否成功
然后修改sshd_config文件
把
PasswordAuthentication yes
PermitRootLogin yes
前面的注释去掉,否则会出现远程ssh把密码错误,无法登陆的问题
最后重启板子,确认登陆无异常,完成移植。