RV1109开发板ssh服务器移植到arm开发板

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     

在这里插入图片描述

mv tarpakgs/openssh-6.1p1.tar.gz  /opt/ssh/compressed 
 //将相应的文件放入compressed中
mv tarpakgs/openssl-1.0.1c.tar.gz  /opt/ssh/compressed 
mv tarpakgs/zlib-1.2.3.tar.gz  /opt/ssh/compressed

在这里插入图片描述
注:
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    //进入zlib-1.2.3
./configure --prefix=/opt/ssh/zlib-1.2.3    

在这里插入图片描述

Vim Makefile

在这里插入图片描述

 make
 make install

在这里插入图片描述
在这里插入图片描述
在后面编译 SSH 的时候,需要用到 zlib 库,作者这里的路径是
/usr/local/include/zlib.h
/usr/local/include/zconf.h
下后面配置的时候需要对应,生成的库文件,如下图所示。
在这里插入图片描述
这部分移植其实就是修改了编译器,修改编译器之后编译出的文件和不修改编译出来的文件是不一样的。在移植过程中,可能因为没有将寄存器配置为目标系统的编译器,那么编译出来的一定运行不了。这里可以通过 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”重定位一下输出即可。
在这里插入图片描述
这里需要用到的命令是“strings -a /opt/ssh/source/zlib-1.2.3/libz.a |grep “GCC””,如下图所示。
在这里插入图片描述
如上图所示,可以看到编译器版本是“8.3-2019.03 (arm-rel-8.36) 8.3.0”的,说明这个库是使用我们设置的编译编译的,编译出的库文件当然也是 arm 上使用的。

3.2 移植openssl

接着来移植 openssl 库,如下图所示

cd /opt/ssh/source/openssl-1.0.1c

在这里插入图片描述

./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为开发板的交叉编译工具链(根据开发板自行修改)
在这里插入图片描述
完成配置如图所示:
在这里插入图片描述

进行修改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
修改完成如下:
在这里插入图片描述
退出makefile后,使用编译命令“make”,如下图所示。
make
make install
执行过程中,出现/usr/bin/pod2man错误
原因分析:这是由于openssl-1.0.1c 与 系统不兼容。
  解决方法:
   删除 pod2man文件:
  sudo rm /usr/bin/pod2man
  在这里插入图片描述
再次执行make install,成功运行如下图所示
在这里插入图片描述

3.3 移植openssh

接着来移植 openssh 库,如下图所示

cd /opt/ssh/source/openssh-6.1p1

在这里插入图片描述
ssh 的 configure 的帮助文件,如下图所示,使用“ ./configure --help”。
在这里插入图片描述
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

配置完成,如下图所示。
在这里插入图片描述
编译完成,最后肯定是需要安装到开发板上的,如下图所示。最后在目录下“/opt/ssh/source/openssh-6.1p1”有这几个二进制文件“scp 、sftp 、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”需要安装到开发板上。

最终编译出来的二进制文件,可以使用 file 命令查看文件属性,如下图所示。使用命令“file scp”,可以看到“scp”文件是 32 位 ARM 上使用的可执行文件。
在这里插入图片描述

4 安装测试

4.1 基本文件安装

在开发板上新建“/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三个目
录,使用命令“mkdir -p /usr/libexec /usr/local/etc /usr/local/bin”,如下图所示。
在这里插入图片描述
在虚拟机 Ubuntu 上,将 openssh-6.1p1 下的生成“scp 、sftp、ssh、sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”可执行文件拷贝到开发板的“/usr/local/bin”目录下,拷贝完成,如下图所示。

在这里插入图片描述
将“moduli、ssh_config、sshd_config”拷贝到开发板的“/usr/local/etc”目录下,拷贝完成,如下图所示。
在这里插入图片描述
将“sftp-server、ssh-keysign”拷贝到开发板的“/usr/libexec”目录下,拷贝完成,如下图所示。
在这里插入图片描述

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 ”文件,如下图所示。
在这里插入图片描述
接着使用剩下的三条命令:

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,否则移植到开发板系统会报错)如下图所示。
在这里插入图片描述

4.3 修改目标板秘钥文件

在开发板串口控制台中,使用命令“vi /etc/passwd”,打开 ssh 秘钥文件,在“/etc/passwd”文件底行添加以下内容:

sshd:x:74:74:Privilege-separated
SSH:/var/empty/sshd:/sbin/nologin

添加完成之后,如下图所示,然后保存,秘钥文件修改完成。

在这里插入图片描述

4.4 测试

作者的开发板链接路由器,PC 机的 Windows系统也是链接路由器,所以首先要确保开发板和 PC 机是可以 Ping 通的,如下图所示。作者的 PC 的 IP 为:192.168.25.66,如下图所示。
在这里插入图片描述
开发板的 IP 为:192.168.25.160,如下图所示。

udhcpc -i eth0
ifconfig

在这里插入图片描述
使用 ping命令测试,如下图所示,网络通畅,另外按键“Ctrl”+c 可以结束 ping动作。
在这里插入图片描述
接着在开发板上新建 root 账户,如下图所示,使用命令“passwd root”,它会提示输入密码,需要重复输入两次以防输错。
在这里插入图片描述
然后在开发板上运行 sshd 二进制文件,使用命令“/usr/local/bin/sshd”,如下图所示,虽然报错,但是不影响使用。如果提示缺少动态库,前面的库文件如果拷贝不全,可能出现这种问题,如果用户使用迅为电子的根文件系统,经过测试各种文件都拷贝没有错误,一般是不会提示缺少什么库的。

然后使用工具 ssh 测试是否和 PC 联通能否正常通信,如下图所示,使用命令“/usr/local/bin/ssh 192.168.25.66”,这里的IP 是作者PC 的IP。
在这里插入图片描述

接着在 PC 上使用 ssh 工具连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如下图所示。
在这里插入图片描述
在这里插入图片描述
成功连接进入开发板内部,如图所示
在这里插入图片描述
到这里,开发板的ssh功能已经全部移植完成,在这次移植中作者参考了许多的文章,例如:https://www.cnblogs.com/topeet/p/9037563.html,非常感谢:topeet 的无私奉献。 在前人的肩膀上进行移植,会少踩很多坑,再次感谢相关的开发者

作者:原风
时间:20220426

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值