RV1109开发板ssh服务器移植到arm开发板
ssh功能移植到RV1109开发板的,由于RV1109的SDK中,没有telnet功能,有时候adb功能在量产中需要关闭,避免造成设备留有漏洞,造成安全隐患。所以将ssh功能移植到开发板,方便以后现场检查设备问题或者查询故障。
1、下载ssh的源码文件
移植openssh需要三个包:openssh、openssl 和 zlib,地址如下:
zlib官方下载:http://www.zlib.net/
openssl官方下载:http://www.openssl.org/source
openssh官网下载:http://www.openssh.com/portable.html
因为它们之间不同版本存在依赖关系,为了保证编译通过,选用较旧的版本。本文以openssh-6.1p1.tar.gz、openssl-1.0.1c.tar.gz、strace-4.19.tar.gz、zlib-1.2.3.tar.gz这个版本为例。
2、准备
虚拟机环境:VMware Workstation 15 Pro、ubuntu18.04
在虚拟机中创建/opt/ssh的文件夹,在ssh文件夹中创建compressed install source 这三个文件夹。
cd /opt/ssh
mkdir compressed source install
![在这里插入图片描述](https://img-blog.csdnimg.cn/9e13e6aafd744c90bef0a19960182f44.png)
mv tarpakgs/openssh-6.1p1.tar.gz /opt/ssh/compressed
mv tarpakgs/openssl-1.0.1c.tar.gz /opt/ssh/compressed
mv tarpakgs/zlib-1.2.3.tar.gz /opt/ssh/compressed
![在这里插入图片描述](https://img-blog.csdnimg.cn/af2db6a36a6f426290b5d8684eb7d913.png)
注:
compressed 压缩文件目录
source 解压文件目录
install 安装文件目录
解压
cd /opt/ssh/compressed
tar zxvf zlib-1.2.3.tar.gz -C …/source/
tar zxvf openssl-1.0.1c.tar.gz -C …/source
tar zxvf openssh-6.1p1.tar.gz -C …/source
3、交叉编译
3.1 移植zlib
由于RV1109开发板使用的交叉编译工具为arm-linux-gnueabihf-gcc
cd /opt/ssh/source/zlib-1.2.3
./configure --prefix=/opt/ssh/zlib-1.2.3
![在这里插入图片描述](https://img-blog.csdnimg.cn/adea52f976984d288b5750b109d4f1b8.png)
Vim Makefile
![在这里插入图片描述](https://img-blog.csdnimg.cn/2ae078d914e74d638c28fc5ed7bc6ebc.png)
make
make install
![在这里插入图片描述](https://img-blog.csdnimg.cn/5d1863c099d64944ae6c3cb7a82c014c.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/70db1c93c6a84967bed064fb6660f4dd.png)
在后面编译 SSH 的时候,需要用到 zlib 库,作者这里的路径是
/usr/local/include/zlib.h
/usr/local/include/zconf.h
下后面配置的时候需要对应,生成的库文件,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f23c0591d5c74fdebfddff95a46998d0.png)
这部分移植其实就是修改了编译器,修改编译器之后编译出的文件和不修改编译出来的文件是不一样的。在移植过程中,可能因为没有将寄存器配置为目标系统的编译器,那么编译出来的一定运行不了。这里可以通过 linux 的 strings 命令查看非文本文件中的可读内容,通常可以和 grep 命令搭配使用。如下图所示,使用命令“strings -a /opt/ssh/source/zlib-1.2.3/ibz.a”
可以查看到所有可读信息,可读信息比较多,可以保存为文本再查看,使用命令“trings -a /opt/ssh/source/zlib-1.2.3/ibz.a > log.my”重定位一下输出即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/10ad539dd40a416f9f33f7271ca0b347.png)
这里需要用到的命令是“strings -a /opt/ssh/source/zlib-1.2.3/libz.a |grep “GCC””,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ffbe00aa73934a6fbc9329c1ee86a2cc.png)
如上图所示,可以看到编译器版本是“8.3-2019.03 (arm-rel-8.36) 8.3.0”的,说明这个库是使用我们设置的编译编译的,编译出的库文件当然也是 arm 上使用的。
3.2 移植openssl
接着来移植 openssl 库,如下图所示
cd /opt/ssh/source/openssl-1.0.1c
![在这里插入图片描述](https://img-blog.csdnimg.cn/9e4e90d12feb492892c9e7ecac59fe12.png)
./Configure –prefix=/opt/ssh/source/openssl-1.0.1c os/compiler:arm-linux-gnueabihf-gcc
注:其中/opt/ssh/source/openssl-1.0.1c是openssl的绝对路径
os/compiler:为固定格式
arm-linux-gnueabihf-gcc为开发板的交叉编译工具链(根据开发板自行修改)
![在这里插入图片描述](https://img-blog.csdnimg.cn/35906e827ca94b5082562c1238d369f1.png)
完成配置如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e41bb7999fda42f1b43f7caa3d97659c.png)
进行修改makefile:
执行命令:vim Makefile
添加:
CROSS_COMPILE=/opt/rv1126_rv1109_sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
注:路径是交叉编译工具链的绝对路径,可根据各自开发板路径自行修改
修改:
CC= $(CROSS_COMPILE)gcc
AR= $(CROSS_COMPILE)ar $(ARFLAGS) r
RANLIB= $(CROSS_COMPILE)ranlib
NM= $(CROSS_COMPILE)nm
修改完成如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/59ab6c8a7e7c43d5919cd92a6ff7e747.png)
退出makefile后,使用编译命令“make”,如下图所示。
make
make install
执行过程中,出现/usr/bin/pod2man错误
原因分析:这是由于openssl-1.0.1c 与 系统不兼容。
解决方法:
删除 pod2man文件:
sudo rm /usr/bin/pod2man
![在这里插入图片描述](https://img-blog.csdnimg.cn/0f9e0d7f9a704d169ef18d4e96edfba5.png)
再次执行make install,成功运行如下图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/1194c89a769e47aaa01d03d12cf9bf4e.png)
3.3 移植openssh
接着来移植 openssh 库,如下图所示
cd /opt/ssh/source/openssh-6.1p1
![在这里插入图片描述](https://img-blog.csdnimg.cn/27fff04e8cb248c18ffdadd9b2208412.png)
ssh 的 configure 的帮助文件,如下图所示,使用“ ./configure --help”。
![在这里插入图片描述](https://img-blog.csdnimg.cn/004e89ab777e41ea8365341ea3952b0b.png)
ssh 的 configure 文件中需要配置的参数
–host 表示编译出来要运行的平台
–with-libs 表示需要的额外的库文件;
–with-zlib 表示库文件 zlib 的 instal 路径 ;
–with-ssl-dir 表示 OpenSSl 文件的 install 路径;
–disable-etc-default-login 表示不使用当前环境变量的编译器,所以后面配置参数时,最后直接配置 CC 和 AR 这两个编译器;
CC 表示设置使用的编译器;
AR 表示设置使用的编译器的路径
接着使用配置命令,命令比较长,作者给大家分段:
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/usr/local/include/ --with-ssl-dir=/opt/ssh/source/openssl-1.0.1c --disable-etc-default-login CC=/opt/rv1126_rv1109_sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc AR=/opt/rv1126_rv1109_sdk/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-ar
配置完成,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/53882cbe616b4d7c9935765c06af89a1.png)
编译完成,最后肯定是需要安装到开发板上的,如下图所示。最后在目录下“/opt/ssh/source/openssh-6.1p1”有这几个二进制文件“scp 、sftp 、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”需要安装到开发板上。
最终编译出来的二进制文件,可以使用 file 命令查看文件属性,如下图所示。使用命令“file scp”,可以看到“scp”文件是 32 位 ARM 上使用的可执行文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/4c5d7e8a065546ddaa78fccae07c3e26.png)
4 安装测试
4.1 基本文件安装
在开发板上新建“/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三个目
录,使用命令“mkdir -p /usr/libexec /usr/local/etc /usr/local/bin”,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20c8cc883b84417b8717e690c6bba4b5.png)
在虚拟机 Ubuntu 上,将 openssh-6.1p1 下的生成“scp 、sftp、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”可执行文件拷贝到开发板的“/usr/local/bin”目录下,拷贝完成,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c2b28bc27d4a4a0e8c7793e427cca11a.png)
将“moduli、ssh_config、sshd_config”拷贝到开发板的“/usr/local/etc”目录下,拷贝完成,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ccaeae6d3b9742018f511f42b317b349.png)
将“sftp-server、ssh-keysign”拷贝到开发板的“/usr/libexec”目录下,拷贝完成,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/06c9eb03b9314613a415071996d138db.png)
4.2 生成key文件,并安装
使用“ssh-keygen”生成是个key文件“ssh_host_rsa_key”
“ssh_host_dsa_key”“ssh_host_ecdsa_key”和“ssh_host_ed25519_key”。
在虚拟机 Ubuntu 控制台,“/opt/ssh/source/openssh-6.1p1”目录下,
使用命令“ssh-keygen -t rsa -f ssh_host_rsa_key -N “””,可以生成“ssh_host_rsa_key ”文件,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8999e743ca624532abdca56eb26fd06a.png)
接着使用剩下的三条命令:
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 ""
执行完成之后,生成的文件如下图所示。
将生成的“ssh_host_rsa_key”“ssh_host_dsa_key”“ssh_host_ecdsa_key”
和“ssh_host_ed25519_key”文件,拷贝到开发板的“/usr/local/etc/”目录,然后将其权限修改为 600。(注意:这个权限一定要改成600,否则移植到开发板系统会报错)如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/10aaeb7be8684a2c87a00d23a51f0929.png)
4.3 修改目标板秘钥文件
在开发板串口控制台中,使用命令“vi /etc/passwd”,打开 ssh 秘钥文件,在“/etc/passwd”文件底行添加以下内容:
sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin
添加完成之后,如下图所示,然后保存,秘钥文件修改完成。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1e910e2aacf347d6b6a2016f0136df94.png)
4.4 测试
作者的开发板链接路由器,PC 机的 Windows系统也是链接路由器,所以首先要确保开发板和 PC 机是可以 Ping 通的,如下图所示。作者的 PC 的 IP 为:192.168.25.66,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e3054af8d36a4c6fb8f02a46634fbb85.png)
开发板的 IP 为:192.168.25.160,如下图所示。
udhcpc -i eth0
ifconfig
![在这里插入图片描述](https://img-blog.csdnimg.cn/5dff6bc1d21d40d3b8c881df70400be2.png)
使用 ping命令测试,如下图所示,网络通畅,另外按键“Ctrl”+c 可以结束 ping动作。
![在这里插入图片描述](https://img-blog.csdnimg.cn/95983a537d7948829e377047d8a9594a.png)
接着在开发板上新建 root 账户,如下图所示,使用命令“passwd root”,它会提示输入密码,需要重复输入两次以防输错。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8b9f94222df747e2a9b32083007048fd.png)
然后在开发板上运行 sshd 二进制文件,使用命令“/usr/local/bin/sshd”,如下图所示,虽然报错,但是不影响使用。如果提示缺少动态库,前面的库文件如果拷贝不全,可能出现这种问题,如果用户使用迅为电子的根文件系统,经过测试各种文件都拷贝没有错误,一般是不会提示缺少什么库的。
然后使用工具 ssh 测试是否和 PC 联通能否正常通信,如下图所示,使用命令“/usr/local/bin/ssh 192.168.25.66”,这里的IP 是作者PC 的IP。
![在这里插入图片描述](https://img-blog.csdnimg.cn/07ca8cf818374b0f92b634150d8aa84c.png)
接着在 PC 上使用 ssh 工具连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如下图所示。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c78a35f54f574a1082ba7bc4e1d3be8a.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/386281e8639b4e6cb9e26317fc45904d.png)
成功连接进入开发板内部,如图所示
![在这里插入图片描述](https://img-blog.csdnimg.cn/42fe16bbbe0f480a8adce21c0c1c5320.png)
到这里,开发板的ssh功能已经全部移植完成,在这次移植中作者参考了许多的文章,例如:https://www.cnblogs.com/topeet/p/9037563.html,非常感谢:topeet 的无私奉献。 在前人的肩膀上进行移植,会少踩很多坑,再次感谢相关的开发者
作者:原风
时间:20220426
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)