i.MX6ULL应用移植 | 移植OpenSSH 8.9到Linux开发板(zlibopensslopenssh)

Posted Mculover666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i.MX6ULL应用移植 | 移植OpenSSH 8.9到Linux开发板(zlibopensslopenssh)相关的知识,希望对你有一定的参考价值。

我制作的文件系统开源地址:https://git.code.tencent.com/mculover666/rootfs-busybox-imx6ull

一、OpenSSH

当我们需要使用ssh远程登录开发板时,需要在开发板上开启ssh服务器。

SSH全称Secure Shell,是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。

OpenSSH是一款开源的SSH协议具体实现,提供了服务器端后台程序和客户端工具,比如:

  • ssh:ssh客户端
  • sshd:ssh服务端
  • scp:用于传输文件

二、移植OpenSSH

1. 获取源码

(1)zlib:一个大规模的Spiffy但微妙的不显眼的压缩库。

下载地址:http://www.zlib.net/

这里我下载最新的1.2.12版本:

axel http://www.zlib.net/zlib-1.2.12.tar.gz

(2)openssl:密码学和SSL/TLS工具包。

下载地址:https://www.openssl.org/source/

这里我下载3.0.2版本:

axel https://www.openssl.org/source/openssl-3.0.2.tar.gz

(3)openssh

下载地址:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/

这里我下载 8.9 版本:

axel https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.9p1.tar.gz

下载完成后如图:

2.1. 移植zlib库

(1)解压zlib源码

tar -zxf zlib-1.2.12.tar.gz


(2)编译zlib

先新建一个文件夹用于存放编译结果:

mkdir zlib

进入zlib源码目录,配置环境变量:

cd zlib-1.2.12/
export CC=arm-linux-gnueabihf-gcc
export LD=arm-linux-gnueabihf-ld
export AD=arm-linux-gnueabihf-as

配置编译路径:

./configure --prefix=/home/mculover666/imx6ull/rootfs/openssh/zlib


后续编译openssh的时候发现zlib编译静态库的时候,并没有指定与位置无关,修改一下makefile,添加-fPIC参数

编译:

make

安装:

make install


(3)拷贝编译结果中lib目录下的zlib库文件,到开发板根文件系统的/lib目录下。

2.2. 移植openssl库

(1)解压

tar -zxf openssl-3.0.2.tar.gz


(2)编译

先新建一个文件夹用于存放编译结果:

mkdir oepnssl

进入 oepnssl 源码目录,配置环境变量:

cd openssl-3.0.2/
export CROSS_COMPILE=arm-linux-gnueabihf-

配置编译路径:

./Configure linux-armv4 shared no-asm --prefix=/home/mculover666/imx6ull/rootfs/openssh/openssl


编译:

make

安装:

make install

(3)拷贝编译结果中lib目录下的libcrypto库文件和libssl库文件,到开发板根文件系统的 /usr/lib 目录下。

cp -af libcrypto.so* ~/imx6ull/rootfs/rootfs-busybox-imx6ull/usr/lib/
cp -af libssl.so* ~/imx6ull/rootfs/rootfs-busybox-imx6ull/usr/lib/

2.3. 移植openssh库

(1)解压

tar -zxf openssh-8.9.tar.gz

(2)编译

进入ssh目录:

cd openssh-8.9p1/

编译配置:

./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/mculover666/imx6ull/rootfs/openssh/zlib --with-ssl-dir=/home/mculover666/imx6ull/rootfs/openssh/openssl --disable-etcdefault-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar

编译:

make

(3)拷贝文件

开发板中创建如下目录:

mkdir -p /usr/local/bin
mkdir -p /usr/local/sbin
mkdir -p /usr/local/libexec/
mkdir -p /usr/local/etc
mkdir -p /var/run
mkdir -p /var/empty/

将下面的可执行文件拷贝到开发板根文件系统的 /usr/local/bin 目录下:

scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan

将下面的可执行文件拷贝到开发板根文件系统的 /usr/local/sbin 目录下:

sshd

将下面的文件拷贝到开发板根文件系统的 /usr/local/etc 目录下:

moduli ssh_config sshd_config

将下面的文件拷贝到开发板根文件系统的 /usr/libexec 目录下:

sftp-server ssh-keysign

(3)进入开发板根文件系统bin目录,为ssh生成软连接

cd bin

ln -s ../usr/local/bin/scp
ln -s ../usr/local/bin/sftp
ln -s ../usr/local/bin/ssh
ln -s ../usr/local/bin/ssh-add
ln -s ../usr/local/bin/ssh-agent
ln -s ../usr/local/bin/ssh-keygen
ln -s ../usr/local/bin/ssh-keyscan

(4)进入开发板根文件系统sbin目录,为sshd生成软连接

cd sbin

ln -s ../usr/local/sbin/sshd

(5)进入开发板根文件系统/usr/local/etc目录,修改sshd配置

cd usr/local/etc

vim sshd_config

允许root用户通过ssh登录:

至此,openSSH移植完成,将根文件系统打包重新烧录到开发板中,之后的命令都在开发板上完成

tar -jcf rootfs.tar.bz2 *

三、openssh设置

1. 添加sshd用户

这里需要使用adduser命令,如果adduser命令无法使用,可以参考博客:嵌入式linux根文件系统:根文件系统报错 passwd: unknown uid 0

创建一个用户名和密码都是sshd的用户:

adduser sshd

2. 生成密钥文件

进入开发板的/usr/local/etc目录,按照如下命令生成:

ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""
ssh-keygen -t ed25519 -f ssh_host_ed25519_key -N ""

因为imx6ull性能比较低,所以第一条命令生成时间会比较长。

四、openssh使用

1. 启动sshd服务器

/sbin/sshd

解决文件夹没有的问题:


将启动命令添加到/etc/init.d/rcS文件,设置开机自动启动。

2. ssh登录开发板

启动后使用ssh登录上去测试,可以登root用户或者sshd用户:

3. ssh传输文件

使用 scp 命令从ubuntu向开发板传输文件:

scp hello.txt sshd@192.168.1.102

也可以使用xftp之类的软件,通过sftp连接开发板传输文件。

以上是关于i.MX6ULL应用移植 | 移植OpenSSH 8.9到Linux开发板(zlibopensslopenssh)的主要内容,如果未能解决你的问题,请参考以下文章

i.MX6ULL应用移植 | 移植tslib到Linux开发板(1.22)

i.MX6ULL应用移植 | 移植lvgl到imx6ull(基于framebuffer)

i.MX6ULL应用移植 | 移植libevdev和evtest工具到imx6ull开发板

i.MX6ULL应用移植 | 移植libevdev和evtest工具到imx6ull开发板

i.MX6ULL应用移植 | 移植lvgl到imx6ull(基于framebuffer)

i.MX6ULL应用移植 | 移植wireless tools到Linux开发板(29 version)