标签搜索

armUbuntu | 开发板 OpenSSH 移植与使用

王先生
2023-10-30 / 0 评论 / 14 阅读 / 正在检测是否收录...
有时候我们需要远程登录到开发板上对系统进行一些操作,这个时候就要使用到 SSH 服务。 SSH 是较可靠、专为远程登录会话和其他网络服务提供安全性的协议,OpenSSH 是 SSH 协议的免费开源版本,本章实现如何在开发板中移植 OpenSSH,实现 SSH 服务。

OpenSSH 简介

SSH 全称为 Secure Shell(安全外壳协议,简称 SSH),是一种加密的网络传输协议,用于在不安全的网络中为网络服务提供安全的传输环境。SSH 功能很强大,但是最常用的还是用于远程登录。OpenSSH 是 SSH 协议的具体实现,OpenSSH 是一款开源、免费的 SSH 软件,提供了服务器端后台程序和客户端工具,OpenSSH 提供了很多程序,常用有以下几个:

  • ssh
    ssh 软件用于替换 rlogin 与 Telnet。
  • scp 和 sftp
    将文件复制到其他主机上,用于替换 rcp。
  • sshd
    SSH 服务器。

OpenSSH 移植

OpenSSH 源码获取

这里我们一共需要移植三个软件包:zlib、openssl 和 openssh。依次到这三个软件的官网下载对应的源码,官网如下:
zlib 官网:http://www.zlib.net/
openssl 官网:https://www.openssl.org/source/
openssh 官网:http://www.openssh.com/

这三个软件的源码我们已经放到了开发板光盘中,路径为:1、例程源码->7、第三方库源码->zlib-1.2.11.tar.gz、 openssl-1.1.1d.tar.gz 和 penssh-8.2p1.tar.gz。接下来就依次编译、移植这三个软件。

移植 zlib 库

参考 armUbuntu | 开发板 移植 zlib 库 - Jocker博客

移植 openssl 库

参考 armUbuntu | 开发板 移植 openssl 库 - Jocker博客

移植 openssh 库

先解压 openssh 源码,命令如下:

tar -vxzf openssh-8.2p1.tar.gz

压完成以后就会生成一个名为“openssh-8.2p1”的文件夹,进入此文件夹里面,然后配置并编译 openssh,命令如下:
配置环境变量:

cd openssh-8.2p1/
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=/home/alientek/tmp/PortingBasedOnSourceCode/zlib-1.2.11/debug --with-ssl-dir=/home/alientek/tmp/PortingBasedOnSourceCode/openssl-1.1.1d/debug --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar    //配置
make    //编译

cd openssh-8.2p1/
./configure --host=arm-linux-gnueabihf --with-libs --with-zlib=../zlib-1.2.11/debug --with-ssl-dir=../openssl-1.1.1d/debug --disable-etc-default-login CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar    //配置
make    //编译

zlib库和openssl库是已经提前编译好的参考上面两个博客*
在配置 openssh 的过程中,
“--with-zlib”参数用于指定 zlib 库所在的目录,
“--with-ssl-dir”参数用于指定 openssl 库所在的目录,
编译 openssh 的时候不用“make install”

将 openssh 相关文件拷贝到开发板根文件系统中
openssh 交叉编译完成以后在开发板中创建如下所示目录(如果存在的话就不需要创建):

/usr/local/bin
/usr/local/sbin
/usr/local/libexec
/usr/local/etc
/var/run
/var/empty

创建命令如下:

mkdir /usr/local/bin -p
mkdir /usr/local/sbin -p
mkdir /usr/local/libexec/ -p
mkdir /usr/local/etc -p
mkdir /var/run -p
mkdir /var/empty/ -p
工作中,每当要部署一台新机器的时候,就意味着有一堆目录需要创建。例如要创建目录“/usr/local/bin”,就需要此次创建“/usr”、“/usr/local”以及“/usr/local/bin”。好在,Linux下mkdir提供了强大的“-p”选项,只要一条命令“mkdir -p /usr/local/bin”就能自动创建需要的上级目录。

上述目录创建好以后将如下文件拷贝到开发板的/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/local/libexec 目录下:

sftp-server ssh-keysign

创建软连接,进入开发板中的/bin 目录下,输入如下命令创建软连接:

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

再进入开发板的/sbin 目录下,输入如下命令创建软连接:

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

软连接创建完成以后就可以直接调用上面 ssh 相关命令了。
打开/usr/local/etc/sshd_config 文件,找到“#PermitRootLogin”所在行,将其改为“PermitRootLogin yes”

openssh 设置

添加 sshd 用户

这里需要使用adduser命令, 创建一个用户名和密码都是sshd的用户:

adduser sshd

在开发板上生成秘钥文件

一切准备好以后我们还需要在开发板中生成秘钥文件,使用我们上面移植 openssh 所编译出来的 ssh-keygen 软件即可。
进入到开发板的/usr/local/etc 目录下,输入如下所示命令生成秘钥文件,由于 6ULL 性能比较差,有些秘钥文件生成过程可以会有点耗时,打开几十秒:

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 ""

完成以后就会在/usr/local/etc 目录下产生 8 个以“ssh_host_”开头的秘钥文件

openssh 使用

openssh 移植已经移植到了开发板中,我们可以通过 sshd 软件在开发板上搭建 openssh 服务器,然后在其他的主机上通过 ssh 来登录开发板。我们可以同样使用 scp 命令来向开发板传输文件。
首先要在开发板上启动 ssh 服务,sshd 软件用于启动 ssh 服务,注意要输入全路径!输入如下命令:

/sbin/sshd    //启动 sshd 服务

也可以在/etc/init.d/rcS 文件中加入如下命令,实现 ssh 服务开机自启动:

/sbin/sshd &

ssh 登录

启动以后我们就可以使用 XobaXterm、SecureCRT 等终端软件通过 SSH 服务登录开发板,SSH 登录成功以后我们就可以直接对开发板进行各种操作了。
同样的,我们也可以在 ubuntu 下通过 ssh 命令登录开发板,输入如下命令:

ssh sshd@192.168.1.251

其中“sshd”为登录账户名字,192.168.1.251 是开发板的 IP 地址。用户名和开发板 IP 地址之间用“@”符号链接起来。
第一次与开发板建立连接的时候会让你进行确认,输入“yes”就行了
输入“yes”以后就会让你输入“sshd”用户密码
如果密码正确的话就会登录进开发板,可以对开发板进行各种操作
输入“exit”命令即可退出 SSH 会话

scp 命令拷贝文件

如果我们要向开发板发送一个文件,我们可以通过 TF 卡或者 U 盘来中转,或者通过我们上一章讲的 tftp 来发送。
本章我们移植 openssh 的时候也编译出来了一个名为“scp”的命令,所以我们可以在开发板中使用 scp 命令向其他主机发送文件,同样的其他主机也可以使用 scp 命令向开发板发送文件。
比如我们要把 ubuntu 中的一个文件发送到开发板中,输入如下命令即可:

scp seriaApp sshd@192.168.1.251

将 seriaApp 文件发送到开发板中,发送完成以后就会在开发板的根目录下看到此文件