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

 makemake 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

RV1109开发板ssh服务器移植到arm开发板相关推荐

  1. apache arm 交叉编译_Apache 2移植到Arm开发板的过程整理——如何交叉编译Apache 2

    话说要在arm开发板的linux系统中运行apache服务器,需要在pc linux系统中交叉编译Apache源码,在网上参考了很多资料都是1.3版本的,最后终于找到apache 2移植到arm开发板 ...

  2. Openssl移植到ARM开发板

    Openssl移植到ARM开发板 openssl源码下载 源码编译配置 使用生成的库文件 openssl源码下载 openssl源码可以在官网下载:https://www.openssl.org/so ...

  3. I.MX6ULL开发板基于阿里云项目实战 3 :阿里云iot-SDK 移植到arm开发板

    上一篇博客讲的是创建产品和设备,本讲,我们将阿里云iot-SDK 移植到arm开发板. 参考资料: https://code.aliyun.com/edward.yangx/public-docs/w ...

  4. MPlayer移植到arm开发板

    今天用了一天的时间将mplayer移植到arm开发板上,移植过程中遇到各种问题,在此做以记录. mplayer版本:1.0rc2 Ubuntu版本:12.04 64位 移植过程: 1.su获取root ...

  5. 学完stm32开发板下一步如何选嵌入式ARM开发板

    如何选择ARM开发板 市场上开发板玲琅满目,我们怎么来选择ARM开发板呢?除了要求ARM开发板资料齐全以外,技术是不是主流.能否结合当前嵌入式产品的应用开发需要,也是很关键的,因为IT技术发展很快,不 ...

  6. SSH服务移植到ARM单板

    SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是目前较可靠,专为远程登录会 ...

  7. arm11 s3c6410 开发板 学习板 工业开发板 比较 国内主流的arm开发板比较

    代理arm11开发板已经几个月了,说下我自己的看法. 我首先用语言描述一下国内主流的arm开发板情况,个人对各个公司开发板的看法,仅代表个人意见,没有针对某个公司的意思,由于6410 的开发难度以及工 ...

  8. 中兴以太网板see服务器地址,中兴传输以太网板数据配置.ppt

    中兴传输以太网板数据配置 SE-业务流程 SE板主要完成的功能是将以太网帧经过L2层的交换后通过SDH网络传输到目的节点,再经过一个相反的过程解释出以太网帧,从而完成以太网帧在SDH网上的透明传输,并 ...

  9. python交叉编译_交叉编译Python3.6.2,使用海思arm-hisiv200-linux-gcc,移植到arm开发板上...

    最近在学习Python,感觉使用Python可以快速的写出程序,比之前使用的C语言快多了,能省出很多时间.多学一点知识有更多的选择.本职工作是嵌入式开发,学习了Python后想移植到开发板上,尝试嵌入 ...

最新文章

  1. 关于MySQL索引知识与小妙招 — 学到了!
  2. 这回导师们颤抖了,这个网站能匿名评价其“人品”,已有大量“不良”导师被爆...
  3. 《ACM国际大学生程序设计竞赛题解Ⅰ》——模拟题
  4. idea 引入oracle驱动并打包_IDEA下从零开始搭建SpringBoot工程
  5. springboot热部署失效解决
  6. BoostrapTable的refresh和refreshOptions区别
  7. 非法关机 mysql_转 mysql数据库非法关机铁血教训
  8. 【C#】Activator.CreateInstance用法
  9. 吊炸天的 JD-hotkey !京东开源!单机 QPS 高达 370000
  10. 小程序生命周期_微信小程序开发日记App生命周期
  11. 【K8S】整体原理-K8S网络
  12. 支付宝积分兑换的扫地机器人好用_如何选购扫地机器人?
  13. 八字易经算法之用JAVA实现日子吉凶星
  14. Circular-Circular 和 Circular-Linear Regression
  15. 怀旧服为什么显示服务器不兼容,《魔兽世界怀旧服》加载出错怎么办 加载出错解决方案...
  16. 财险商闭口不提交强险利润
  17. 指令系统(一)数据传送指令
  18. 软件测试职业发展规划
  19. Matlab实现绘制圆柱体
  20. 最新C++游戏服务器开发

热门文章

  1. Linux根目录文件详解
  2. ElasticSearch 命令
  3. 【时间序列】python与时间序列基本教程4(超过1.9万字 代码超过900行 包括49个图)...
  4. pat 乙级 1015. 德才论(25)
  5. 新手引导功能的四种姿势
  6. IOS版aplayer使用教程_Y Y的使用教程视频版/图片版(手机版。电脑版。楚恒上课必用软件)...
  7. 非你莫属 周倩如 女程序员 神一样的选手!
  8. 孙宇晨再落一子,APENFT和WINkLink要携手布局GameFi了?
  9. Salesforce Aura 组件
  10. Linux不允许进程被杀,linux – 我的进程被杀了但我无法理解内核通知