iTOP-4412开发板-实战教程-ssh服务器移植到arm开发板

本文转自迅为开发板:http://www.topeetboard.comlinux

 

在前面实战教程中,移植了“串口文件传输工具”,整个移植过程是比较简单的,并且我git

们没有作任何协议方面的了解,只是“配置”+“编译”就完成了整个工做,如今你们应该对github

移植开源软件有了基本的了解。vim

入门视频教程中,给 Windows系统安装了 ssh 客户端,给 Ubuntu 安装了 ssh 服务器,服务器

这样就能够经过 ssh Windows和虚拟机 Ubuntu 之间传输文件。其实在开发板上也是能够网络

移植和安装 ssh 服务器,这样就能够经过网络,在 Windows和开发板之间传输文件。ssh

“实战教程-ssh 服务器移植到开发板”,咱们要完成的目标是可以经过 ssh 在开发板在工具

Windows和开发板之间传输文件,固然也是可使用 ssh 控制台。测试

这个实验比前面的“串口文件传输工具”教程在工程(实用性)上是更加有用的,假如在spa

实际的产品中,运行的是根文件系统,没有界面,若是数据须要在开发板和 Windows传输数

据,对于普通用户来讲,是一个很好的选择,操做起来比较简单,只须要登录而后直接将文件

拖来拖去便可。

这个实验的难度要比“串口文件传输工具”要大一点,ssh 服务器须要依赖其余的库文

件,因此须要开发者先移植完成全部依赖的库文件,最后才能移植 ssh 服务器。

 

 

1 ssh官网和下载地址

本小节的地址在做者没有代理的状况下,测试可用。

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

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

OpenssL github 下载地址,以下所示。

https://github.com/openssl/openssl

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

http://www.openssh.com/

HXng KXngo 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 表示设置使用的编译器的路径(蛮奇怪,配置文件中彷佛没有这个参数,用户能够执

行验证下)。

接着使用配置命令,命令比较长,做者使用颜色给你们分段:

./configure --host=arm-none-linux --with-libs --with-zlib=/home/project/ssh-arm/install/zlib-1.2.3 --with-ssl-dir=/home/project/ssh-arm/install/openssl-0.9.8h--disable-etc-default-login CC=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc AR=/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-ar

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

 

 

 

 

 

 

配置完成,以下图所示。

 

 

 

 

 

 

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

 

 

 

 

 

 

 

编译完成,以下图所示。

 

 

 

 

 

 

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

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

sshdssh-addssh-agentssh-keygenssh-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 sftpsshsshdssh-addssh-agentssh-keygenssh-keyscan”可执行文件拷贝到开发板的

/usr/local/bin”目录下,拷贝完成,以下图所示。

 

 

 

 

 

 

 

modulissh_configsshd_config”拷贝到开发板的“/usr/local/etc”目录下,

拷贝完成,以下图所示。

 

 

 

 

 

 

 

sftp-serverssh-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-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,以下图所示。

 

 

 

 

3.3 修改目标板秘钥文件

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

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

sshd:x:74:74:Privilege-separated

SSH:/var/empty/sshd:/sbin/nologin

添加完成以后,以下图所示,而后保存,秘钥文件修改完成。

 

 

 

 

 

 

3.4 测试

做者的开发板连接路由器,PC 机的 Windows系统也是连接路由器,因此首先要确保开

发板和 PC 机是能够 Ping 通的,以下图所示。

做者的 PC IP 为:192.168.2.12,以下图所示。

 

 

 

 

 

 

 

开发板的 IP 为:192.168.2.230,以下图所示。

 

 

 

 

 

 

 

使用 ping命令测试,以下图所示,网络通畅,另外按键“Ctrl+c 能够结束 ping

做。

 

 

 

 

 

 

 

接着在开发板上新建 root 帐户,以下图所示,使用命令“passwd root”,它会提示输

入密码,须要重复输入两次以防输错。

 

 

 

 

 

 

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

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

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

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

 

 

 

 

 

 

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

行了。

 

 

 

 

而后使用工具 ssh 测试是否和 PC 联通可否正常通讯,以下图所示,使用命令

/usr/local/bin/ssh 192.168.2.12”,这里的 IP 是做者 PC IP

 

 

 

 

接着在 PC 上使用 ssh 工具链接开发板,使用方法和链接 Ubuntu 上的 ssh 相似,以下图

所示。

 

 

 

 

 

 

而后传一个文件测试下,以下图所示。

 

 

 

 

 

 

而后经过 ssh 直接拖到到 pc 上,以下图所示,内容不变,说明成功完成了文件传输移植

工做。

 

 

 

 

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

样。

 

 

 

 

 

另外在安装部分,也能够将其拷贝到文件系统的源码中对应目录,从新打包编译,生成直

接支持 ssh 的镜像。

到这里,部分用户可能会有疑惑,第一我的是如何知道 ssh 须要这两个库文件的呢?首

先,开发 ssh 软件的大神,作了这个东西会提供编译和使用 demo,这样就有了基础的英文移

植文档,而后慢慢的会有中文版的,接着 ssh 流传开了以后,经过网络搜索 ssh 移植到 arm

的方法的文档和博客,就随处可见了。

固然,假如未来你们工做有移植的需求,找不到中文教程,须要直接使用某个开源软件的

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

少各类库,经过编译,也是能够一步一步找出依赖库的。

相关文章
相关标签/搜索