itop-imx6ul实战项目:ssh服务器移植到arm开发板

topeet topeet     2022-12-19     664

关键词:

实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机

编译器:arm-2009q3 编译器

开发板系统:QT系统

 

 
技术图片

 

开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh

服务器,这样就可以通过ssh 在 Windows 和虚拟机 Ubuntu 之间传输文件。其实在开发

板上也是可以移植和安装ssh 服务器,这样就可以通过网络,在 Windows 和开发板之间传

输文件。“实战教程-ssh 服务器移植到开发板”,我们要完成的目标是能够通过 ssh 在开发

板在Windows 和开发板之间传输文件,当然也是可以使用 ssh 控制台。

 

1 ssh 官网和下载地址

OpenssL 下载官网地址,如下所示。就是罗永浩捐过 100 万的那个开源组织。

https://www.openssl.org/source/

OpenssL 的 github 下载地址,如下所示。

https://github.com/openssl/openssl

ssh 开源组织官网地址,如下所示。

http://www.openssh.com/

HXng KXng(o 用 X 替代,以防文档上传之后被屏蔽)的 ssh 下载地址,测试可以

用,如下所示。

https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/

zlib 官网地址,如下所示。

http://www.zlib.net

 

 

2 移植过程

源码使用迅为下载好的,编译器使用“arm-2009q3”。作者是“/home/project/ssh-

arm/”目录下,解压编译配置这三个需要移植的文件,用户如果在其它目录下,配置文件需

要根据实际情况修改,安装目录是“/home/project/ssh-arm/”目录下的“install”文件

夹,如下图所示。

 

 
技术图片

 

如下图所示,安装目录“install”下新建两个文件夹“openssl-0.9.8h”和“zlib-

1.2.3”,后面编译之后需要安装到这个目录下。

 

 

 
技术图片

 

2.1 移植 zlib

拷贝“zlib-1.2.3.tar.gz”到 Ubuntu 系统,使用命令“tar -vxf zlib-1.2.3.tar.gz”解

压,得到“zlib-1.2.3”文件夹,使用命令“cd zlib-1.2.3”进入“zlib-1.2.3”文件夹,如下图所示。

 

 
技术图片

 

接着使用命令“./configure --prefix=/home/project/ssh-arm/install/zlib-1.2.3”,设

置配置文件,如下图所示。

 
技术图片

 

使用命令“vim Makefile”修改编译参数,将所有 gcc 修改为“arm-none-linux-

gnueabi-gcc”,如下图所示。

 

 
技术图片

接着使用编译命令“make”,如下图所示。

 
技术图片

接着使用安装命令“make install”,如下图所示。

 
技术图片

 

在后面编译SSH 的时候,需要用到 zlib 库,作者这里的路径是“/home/project/ssh-

arm/install”下后面配置的时候需要对应,生成的库文件,如下图所示。

 
技术图片

这部分移植其实就是修改了编译器,修改编译器之后编译出的文件和不修改编译出来的文

件是不一样的。在移植过程中,可能因为没有将寄存器配置为目标系统的编译器,那么编译出

来的一定运行不了。这里可以通过linux 的 strings 命令查看非文本文件中的可读内容,通

常可以和grep 命令搭配使用。

如下图所示,使用命令“strings -a /home/project/ssh-arm/install/zlib-

1.2.3/lib/libz.a”可以查看到所有可读信息,可读信息比较多,可以保存为文本再查看,使用

命令“strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a > log.my”重定位一

下输出即可。

 
技术图片

这里需要用到的命令是“strings -a /home/project/ssh-arm/install/zlib-1.2.3/lib/libz.a |

grep “GCC””,如下图所示。

 
技术图片

如上图所示,可以看到编译器版本是“2009q3-67-4.4.1”的,说明这个库是使用我们设

置的编译编译的,编译出的库文件当然也是arm 上使用的。

2.2 移植 openssl

接着来移植openssl 库,拷贝“openssl-0.9.8h.tar.gz”到 Ubuntu 系统,使用命令“tar -vxf openssl-0.9.8h.tar.gz”解压,得到“openssl-0.9.8h”文件夹,使用命令“cd

openssl-0.9.8h”进入“openssl-0.9.8h”文件夹,如下图所示。

 
技术图片

接着使用命令“./Configure linux-elf-arm -DB_ENDIAN linux:‘arm-none-linux-

gnueabi-gcc‘ --prefix=/home/project/ssh-arm/install/openssl-0.9.8h”配置编译文件,

如下图所示。

 

 
技术图片

配置完成,如下图所示。

 

 
技术图片

 

 

 

使用编译命令“make”,如下图所示。

 

 
技术图片

 

编译完成,如下图所示。

 

 
技术图片

 

最后使用安装命令“make intall”,如下图所示。

 

 
技术图片

 

编译完成,如下图所示。

 

 

 
技术图片

 

如下图所示,可以看到生成了对应的库文件,这是后面移植ssh 需要的。

 

 

 

 
技术图片

 

和前面libz.a 小节类似,可以使用命令查看一下编译出来的文件到底有没有配置正确。

2.3 移植 ssh

接着来移植openssh,拷贝“openssh-4.6p1.tar.gz”到 Ubuntu 系统,使用命令

“tar-vxf openssh-4.6p1.tar.gz”解压,得到“openssh-4.6p1”文件夹,使用命令“cd

openssh-4.6p1/”进入“openssh-4.6p1”文件夹,如下图所示。

 

 

 
技术图片

 

 

这里看一下ssh 的 configure 的帮助文件,如下图所示,使用“ ./configure --

help”。

 

 

 
技术图片

 

ssh 的 configure 文件中需要配置的参数

-host 表示编译出来要运行的平台

--with-libs 表示需要的额外的库文件;

--with-zlib 表示库文件 zlib 的 instal 路径 l;

--with-ssl-dir 表示 OpenSSl 文件的 install 路径;

--disable-etc-default-login 表示不使用当前环境变量的编译器,所以后面配置参数

时,最后直接配置CC 和 AR 这两个编译器;

CC 表示设置使用的编译器;

AR 表示设置使用的编译器的路径(蛮奇怪,配置文件中似乎没有这个参数,用户可以执

行验证下)。

接着使用配置命令,命令比较长,作者使用颜色给大家分段:

 

 
技术图片

配置编译文件,如下图所示。

 

 

 
技术图片

 

 

配置完成,如下图所示。

 

 
技术图片

 

 

使用编译命令“make”,如下图所示。

 

 
技术图片

编译完成,如下图所示。

 

 
技术图片

 

 

编译完成,最后肯定是需要安装到开发板上的,如下图所示。最后在目录下

“/home/project/ssh-arm/openssh-4.6p1”有这几个二进制文件“scp 、sftp 、ssh、

sshd、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan”需要安装到开发板上。最终编译

出来的二进制文件,可以使用file 命令查看文件属性,如下图所示,使用命令“file scp”,

可以看到“scp”文件是 32 位 ARM 上使用的可执行文件。

 

 
技术图片

 

 

 

3 安装测试

3.1 基本文件的安装

在开发板上新建“/usr/libexec“、“/usr/local/etc ”、“/usr/local/bin ”三个目

录,使用命令“mkdir -p /usr/libexec /usr/local/etc /usr/local/bin”,如下图所示。

 

 

 
技术图片

 

 

 

在虚拟机Ubuntu 上,将 openssh-6.6p1 下的生成“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”目录下,拷贝完成,

如下图所示。

 

 

 
技术图片

 

 

3.2 生成 key 文件,并安装

使用“ssh-keygen”生成是个 key 文件“ssh_host_rsa_key”“ssh_host_dsa_key”

“ssh_host_ecdsa_key”和“ssh_host_ed25519_key”。在虚拟机 Ubuntu 控制台,

“/home/project/ssh-arm/openssh-4.6p1”目录下,使用命令“ssh-keygen -t rsa -f

ssh_host_rsa_key -N ""”,可以生成“ssh_host_rsa_key ”文件,如下图所示。

 

 

 
技术图片

 

接着使用剩下的三条命令:

 

 

 
技术图片

 

执行完成之后,生成的文件如下图所示。

 

 

 
技术图片

 

将生成的“ssh_host_rsa_key”“ssh_host_dsa_key”“ssh_host_ecdsa_key”和

“ssh_host_ed25519_key”文件,拷贝到开发板的“/usr/local/etc/”目录,然后将其权限

修改为600,如下图所示。

 

 
技术图片

 

 

 

3.3 修改目标板秘钥文件

在开发板串口控制台中,使用命令“vi /etc/passwd”,打开 ssh 秘钥文件,在

“/etc/passwd”文件底行添加以下内容:

 

 

 
技术图片

 

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

 

 
技术图片

 

 

 

3.4 测试

作者的开发板链接路由器,PC 机的 Windows 系统也是链接路由器,所以首先要确保

开发板和PC 机是可以 Ping 通的。接着在开发板上新建 root 账户,如下图所示,使用命

令“passwd root”,它会提示输入密码,需要重复输入两次以防输错。

 

 

 
技术图片

 

 

 

然后在开发板上运行sshd 二进制文件,使用命令“/usr/local/bin/sshd”,如下图所

示,虽然报错了,但是不影响使用。如果提示缺少动态库,前面的库文件如果拷贝不全,可能

出现这种问题,如果用户使用迅为电子的根文件系统,经过测试各种文件都拷贝没有错误,一

般是不会提示缺少什么库的。

 

 

 
技术图片

 

 

接着使用“ps”命令,查看一下 sshd 是否在运行,如下图所示,可以看到 sshd 已经

运行了。

 

 

 

 
技术图片

 

然后使用工具ssh 测试是否和 PC 联通能否正常通信,如下图所示,使用命令

“/usr/local/bin/ssh 192.168.2.16”,这里的 IP 是作者 PC 的 IP。

 

 

 
技术图片

 

接着在PC 上使用 ssh 工具连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如

下图所示。

接着在PC 上使用 ssh 工具连接开发板,使用方法和连接 Ubuntu 上的 ssh 类似,如

下图所示。

 

 
技术图片

 

 

 

ssh 控制台也是可以使用的,如下图所示,登陆方法和 PC 连接虚拟机 Ubuntu 的 ssh

一样。至此,ssh 移植到 arm 板上完成。

另外在安装部分,也可以将其拷贝到文件系统的源码中对应目录,重新打包编译,生成直接支持ssh 的镜像。到这里,部分用户可能会有疑惑,第一个人是如何知道 ssh 需要这两个

库文件的呢?首先,开发ssh 软件的大神,做了这个东西会提供编译和使用 demo,这样就

有了基础的英文移植文档,然后慢慢的会有中文版的,接着ssh 流传开了之后,通过网络搜

索ssh 移植到 arm 的方法的文档和博客,就随处可见了。

当然,假如将来大家工作有移植的需求,找不到中文教程,需要直接使用某个开源软件的

demo,首先就需要英文过关,然后还需要有移植的基础知识。在编译的过程中,它会提示缺

少各种库,通过编译,也是可以一步一步找出依赖库的。

http://topeetboard.com

迅为4412开发板项目实战zigbee智能家居门禁系统智能网关

....1移植教程,mqtt移植教程2.项目实战视频(8个项目):云服务器只能家居、门禁系统、WEB服务及远程控制、智能网关、手机远程控制开发板、图像识别项目、机车导航项目、Zigbee智能家居3.Android应用开发环境更新为Studio,并和eclip... 查看详情

ssh网上商城项目实战23完成在线支付功能

...获得明文,将明文加密成签名(密文)然后再去访问易宝服务器,易宝连接银行,完成支付。   但是考虑到M 查看详情

ssh项目实战国税协同平台-1.项目介绍

项目介绍1.1项目背景国税协同办公平台包括了行政管理、后勤服务、在线学习、纳税服务、我的空间等几个子系统;我们本次主要的开发功能是纳税服务子系统的部分模块和基于纳税服务子系统信息的个人工作台首页。纳税服务... 查看详情

ssh实战·唯唯乐购项目(上)

前台需求分析一:用户模块注册前台JS校验使用AJAX完成对用户名(邮箱)的异步校验后台Struts2校验验证码发送激活邮件将用户信息存入到数据库激活点击激活邮件中的链接完成激活根据激活码,查询数据库中是否有该用户;如果有... 查看详情

ssh网上商城项目实战22获取银行图标以及支付页面的显示

从上一节的小demo中我们搞清楚了如何跟易宝对接以及易宝的支付流程。这一节我们来做一下支付页面以及在页面中导入银行图标。 1.存储银行图标银行图标一般不会总是去加载,因为这些东西是死的,没必要每次进入支付页... 查看详情

ansible中roles的实战使用(代码片段)

...装httpd服务使用rools搭建,代码复用,便于日常维护管理1.在服务器端生成公钥,将公钥文件导入到客户端主机注:同步过程需要输入yes和各自的root密码即可;完成后可直接ssh[email protected]就可以无密码登录上去了ssh-keygen-P""-f"/root/.ss... 查看详情

ffmpeg添加库实战:移植srs-librtmp到ffmpeg

一、从SRS中抽取出librtmp1.1srsbranch:2.0release抽取出库1.2.srsbranch:2.0release抽取出源码二、问题 查看详情

ffmpeg添加库实战:移植srs-librtmp到ffmpeg

一、从SRS中抽取出librtmp1.1srsbranch:2.0release抽取出库1.2.srsbranch:2.0release抽取出源码二、问题 查看详情

ssh网上商城项目实战25使用javaemail给用户发送邮件

当用户购买完商品后,我们应该向用户发送一封邮件,告诉他订单已生成之类的信息,邮箱地址是从用户的基本信息中获取,好了,首先我们来看一下Java中发送邮件的方法。1.java中发送email的方法  在完善这个项目之前,... 查看详情

ssh网上商城项目实战20在线支付平台的介绍

  之前已经完成了首页的显示,用户添加购物车,确认订单等功能,下面就是支付功能的开发了。用户确认了订单后会直接跳转到支付页面进行在线支付,在线支付需要第三方的接口,这一节主要介绍一些关于第三方支付... 查看详情

tomcat项目移植到weblogic的问题

我的一个SSI(struts+spring+ibatis)项目在tomcat服务器上运行正常,但部署到weblogic上时报错。出错信息如下:weblogic.management.ManagementException:-withnestedexception:[weblogic.management.DeploymentException:Exception:weblogic.management.ApplicationException:start()f... 查看详情

docker添加容器ssh服务(代码片段)

...egories:Dockercopyright:true---Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有... 查看详情

jspmyecplise项目移植到ecplise

把myecplise项目移植到ecplise的一些细节:参考于http://www.cnblogs.com/liushuijinger/p/3396063.html 因为个人需要,需要把JSP项目从myecplise项目移植到ecplise上,有些config需要改动,在这里做个笔记: 修改项目中的.project文件1,增加一... 查看详情

计算机毕业设计实战项目之[含论文+源码等]ssh超市进销存管理系统[包运行成功]

...统SSH》该项目采用技术jsp、SpringMVC、Spring、hibernate、tomcat服务器、mysql数据库开发工具eclipse,项目含有源码、论文、配套开发软件、软件安装教程、项目发布教程开发本超市进销存管理系统的主要目标是方便企业对商品、客... 查看详情

ssh批量管理分发项目实战介绍与实践

ssh认证类型:基于口令的安全验证,批量管理?expect,pssh,sshpassm01机器(钥匙)私钥被管理机器(锁)公钥    m01nfs01backupweb011、在上面4台机器上面操作:创建用户及密码useraddoldgirlecho123456|passwd--stdinoldgirlidoldgirlsu-... 查看详情

深度学习案例实战(移植到ios平台)

​​活动地址:CSDN21天学习挑战赛学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:想系统/深入学习某技术知识点…一个人摸索学习很难坚持... 查看详情

深度学习案例实战(移植到ios平台)

​​活动地址:CSDN21天学习挑战赛学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:想系统/深入学习某技术知识点…一个人摸索学习很难坚持... 查看详情

part23:cocos2d-x开发实战-移植-从win32到windowsphone8-关东升-专题视频课程

Part23:Cocos2d-x开发实战-移植-从Win32到WindowsPhone8—6652人已学习课程介绍        介绍了从Win32到WindowsPhone8平台移植工作有那些。这些工作包括了:WindowsPhone8开发环境搭建和Cocos2d-x3.0的WindowsPhone8工程移... 查看详情