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

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RV1109开发板ssh服务器移植到arm开发板 的相关文章

  • 自定义组件实现v-model

    在项目中需要做一个标题展开框 xff0c 点击展开才会显示下面的内容 因为多个地方都需要这样的可展开标题 xff0c 所以做了一个自定义组件 组件需要一个双向绑定的值 xff0c 控制展开 缩放 于是就思考 xff0c 父向子可以用prop
  • linux下提示bash:command not found

    如果新装的系统 xff0c 运行一些很正常的诸如 xff1a shutdown xff0c fdisk的命令时 xff0c 悍然提示 xff1a bash command not found 那么 首先就要考虑root 的 PATH里是否已
  • k8s与pod概念

    此文章为学习过程中根据网上资源整合总结 文章目录 1 为什么需要k8s1 1 应用部署模式的演进1 11 模式对比1 12 各模块介绍 1 2 管理大量的容器 k8s 2 ks8的集群架构3 pod k8s调度的最小单元3 1 一个 pod
  • git在http协议切换账号/输错账号密码如何更改

    掩面哭泣 xff0c 为什么提交总会出问题 这次是因为我push到gerrit上的时候第一次用错成了自己的账号 xff0c 然后想更改成公司的 xff0c 不再跳出登录界面了 xff0c 改不了 因为只有公司账号上设置了agreement
  • 【vue】利用prettier插件规避烦人的eslint报错和代码不规范

    本文主要包括两点 xff1a 大家协同开发代码各异 xff0c eslint加上 64 vue prettier采取recommended 43 prettier组合可使得代码更规范使用vscode的prettier插件在修改保存时自动格式
  • 前端理解base64

    一 背景 xff1a ascii码 字符 61 gt 二进制 计算机中所有数据的存储都是以二进制模式 xff0c 比如想要存储abcd需将其转化为二进制 xff0c 具体用哪些二进制来表示哪个符号 xff0c 有一个统一的编码规则 xff0
  • antd使用相关笔记

    文章目录 modal设置样式无效checkboxform设置值 modal设置样式无效 因为挂在div外 xff0c 所以用less时包在该组件的根div下的css样式设置无效 xff0c 需设置 xff1a span class toke
  • vue实例的生命周期详解

    Vue实例的生命周期 简介 此篇文章说的是最简单的单个VUE组件的生命周期 官网中的长图诠释了Vue实例从创建 xff0c 运行到销毁的整个过程 从vue实例的创建 xff0c 运行 xff0c 销毁期间 xff0c 总是伴随着各种各样的事
  • vue实例和组件的区别

    引言 上次写vue单组件项和路由的时候 xff0c 想到一个问题 new Vue 是一个Vue实例 xff0c 那么组件是Vue实例吗 xff1f 分析 之前说了 xff0c 有两种开发方式 一个是基于浏览器的 xff08 即直接在scri
  • 全面分析ajax跨域访问原因及解决方案

    文章目录 引言什么是ajax跨域问题为什么会发生ajax跨域访问解决思路方法一 xff1a 浏览器禁止检查方法二 xff1a jsonp解决 jsonp是什么 用jsonp后台需要改动 jsonp原理 jsonp有什么弊端 方法三 xff1
  • 前端工程化--commit代码校验配置

    需求 配置使得在git commit m 39 xxxx 时 xff0c 先执行1 eslint检测 2 commit规范检测 xff0c 两个条件通过后才commit成功 xff0c 才可以push代码 是前端工程化的一部分 xff0c
  • flutter错误: 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain

    项目莫名其妙的运行时不能使用 终端 gradlew 命令 输入命令就报错 找不到或无法加载主类 org gradle wrapper GradleWrapperMain 正常的项目中是有 gradle 的jar和properties文件的
  • ChatGPT报错“Sorry You Have Been Blocked“ 解决办法

    5月以来 xff0c 很多用户在使用ChatGPT时遇到如上图所示的错误 这篇文章将讨论为什么会报这个错误以及如何尝试解决它 以下是最常见的原因 xff1a 使用VPN或代理服务浏览器问题 xff0c 例如版本过时或不兼容可疑的浏览模式触发
  • resultMap(12)

    前记 xff1a 这是很早之前自学学习myBatis时的笔记 xff0c 内容比较基础 xff0c 适合新手 xff0c 内容基本是来自网络 xff0c 如有雷同 xff0c 敬请谅解 xff01 resultMap resultType
  • 服务器性能之IO性能指标含义

    最近在做日志易可视化展示 xff0c 涉及到服务器性能指标分析 xff0c 需要了解各个指标的含义 xff0c 下面是I O指标的含义 xff0c 记录下以备后用 xff1a rrqm s 每秒对该设备的读请求被合并次数 xff0c 文件系
  • Android进阶-apk系统签名

    一 来源 有时候我们开发一个apk需要系统权限 xff0c 于是我们便会在apk的AndroidManifest xml中添加如下属性 xff1a android sharedUserId 61 34 android uid system
  • 微信小程序使用lottie-miniprogram插件。显示json格式的动画,手机上锯齿模糊问题

    https github com wechat miniprogram lottie miniprogram 使用办法 通过 npm 安装 xff1a npm install save lottie miniprogram 传入 canva
  • nginx 代理 http、https 配置

    nginx 代理 http https 配置 http配置ssl https 配置 nginx 部署安装在之前的文章中已有教程 xff0c 这里不再叙述 xff0c 详情访问 xff1a nginx在centos7环境下安装本文主要讲述配置
  • vmware虚拟机linux切换命令行界面和图形化界面

    ctrl 43 alt 43 F3 切换命令行模式 ctrl 43 alt 43 F1 切换图形界面模式
  • MariaDB安装

    安装教程 进入MariaDB官网 xff1a https mariadb org 点击 Download 选择MaridDB Repositories跳转到如下页面 这里的镜像文件我选择的是Centos7的 xff0c 如果你的是其他的 x

随机推荐