itop-3568 开发板文件系统构建学习笔记(7)根文件系统添加 ssh(Buildroot 和源码编译两种方式)

《【北京迅为】itop-3568 开发板文件系统构建手册v1.0.pdf》学习笔记

本文将在 Buildroot 根文件系统和 Busybox 根文件系统移植 ssh 工具,前者只需简单在 Buildroot 配置菜单中添加软件包,后者则需要下载软件包源码,手动编译移植。

Buildroot 添加 ssh

在配置菜单开启 ssh

在 Buildroot 根目录,输入 make menuconfig 进入配置菜单界面,

在这里插入图片描述

打开 Target packages->Networking applications->openssh,

在这里插入图片描述

保存退出

在这里插入图片描述

编译 Buildroot

使用 make 编译 Buildroot(注意保持网络畅通)

在这里插入图片描述

编译完成后,output/target/usr/bin 等目录会出现 ssh 相关可执行文件,

在这里插入图片描述

烧录镜像到开发板

这一步直接参考之前的一篇笔记的最后一章节 制作文件系统镜像

测试 ssh

先给开发板 root 用户设置一个密码,

在这里插入图片描述

修改 /etc/ssh/sshd_config 文件,将 #PermitRootLogin prohibit-password 改为 PermitRootLogin yes

在这里插入图片描述

运行 /usr/sbin/sshd,出现如下错误,提示我们 /var/empty 必须被 root 用户拥有,且只有 root 可写,

在这里插入图片描述
通过下面两条命令修改 /var/empty 的属性,

在这里插入图片描述

再次运行 /usr/sbin/sshd,如果后台能看到 sshd 在运行,表示 sshd 开启成功。

在这里插入图片描述

在 PC 主机上运行 putty 等软件,使用 ssh 连接开发板,

在这里插入图片描述

成功连接上开发板:

在这里插入图片描述

手动移植 ssh

相比于 Buildroot 自动移植 ssh,手动移植比较繁琐,下文仅供参考

下载软件源码

在由 Busybox 构建的最小根文件系统中,如果想添加软件,基本都需要自己手动移植,移植 SSH 需要 3 个软件包,分别是 zlib、openssl 和 openssh,我全部选择下载最新版。

1. zlib

zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发。

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

在这里插入图片描述

2. openssl

SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。

在计算机网络上,OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连接者的身份。这个包广泛被应用在互联网的网页服务器上。

——百度百科

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

在这里插入图片描述

3. openssh

OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。

——百度百科

下载地址:http://www.openssh.com/portable.html

在这里插入图片描述

在这里插入图片描述

编译软件源码

将下载的压缩包分别解压,

在这里插入图片描述

编译前,先确认交叉编译器是否添加到环境变量,

在这里插入图片描述

编译 zlib

进入 zlib 源码路径,运行 ./configure --prefix=<安装路径> 生成 Makefile 文件,

在这里插入图片描述
Makefile 中默认编译器为 gcc,需要将所有 gcc 改为我们需要用的交叉编译器-gcc(下面是 vim 下的替换方法)

在这里插入图片描述

替换后:

在这里插入图片描述

将 AR 和 RANLIB 也作对应的修改,

在这里插入图片描述

Makefile 修改完成后,运行 make 和 make install 进行编译和安装

在这里插入图片描述

编译 openssl

进入 openssl 源码目录,运行 ./config no-asm --prefix=<安装路径> --cross-compile-prefix=<交叉编译器名-> 生成 Makefile

在这里插入图片描述

将 Makefile 文件中的 -m64 删除,不然编译会报错

在这里插入图片描述

运行 make 和 make install 进行编译安装,

在这里插入图片描述

编译 openssh

openssh 只需要指定 zlib 库,openssl 库及交叉编译平台,不需要指定安装路径(不需要安装),

在这里插入图片描述

生成 Makefile 后,运行 make 进行编译,

在这里插入图片描述


我在配置 Makefile 时,遇到了一个错误,折腾了半天,甚至给 ubuntu 系统手动安装了 zlib(最新版本),

在这里插入图片描述

最后发现,只是在配置时,打错了 zlib 库的路径。。。主要是上面的 checking for zlib...yes 误导了我。

在这里插入图片描述


移植 ssh 到最小系统

我选择将 ssh 所需文件打包,然后直接拷贝到开发板

创建打包目录

新建一个目录 ssh_tar,作为打包根目录(对应最小系统的根目录),创建如下文件夹,

在这里插入图片描述

回到 ssh 源码目录,将编译生成的可执行文件拷贝到 ssh_tar 的 usr/local/bin 目录,将 moduli 、ssh_config 、sshd_config 拷贝到 ssh_tar 的 /usr/local/etc 目录,将 sftp-server、ssh-keysign 拷贝到 ssh_tar 的 /usr/local/libexec 目录:

在这里插入图片描述

生成 Key 文件

进入打包目录的 usr/local/etc 目录,在该目录下依次输入以下命令生成 Key 文件,

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 dsa -f ssh_host_ed25519_key -N ""

在这里插入图片描述

修改 sshd_config

修改 ssh_tar/usr/local/etc/sshd_config,将 PermitRootLogin 所在行改为 PermitRootLogin yes

在这里插入图片描述
修改 /etc/passwd

这里需要直接修改开发板的 /etc/passwd 文件,添加 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

在这里插入图片描述

拷贝相关库

在打包目录下创建一个 lib 目录,

在这里插入图片描述

将 openssl 编译目标目录的 libcrypto.so* 拷贝到 ssh_tar/lib

在这里插入图片描述

将 zlib 编译目标目录的 libz.so* 拷贝到 ssh_tar/lib

在这里插入图片描述

修改 var/empty 权限

在 ssh_tar 目录下下,通过下面两条命令修改 ssh_tar/var/empty 的属性:

sudo chown root var/empty
sudo chmod 711 var/empty

在这里插入图片描述

这一步很必要,不然会报如下错误:

在这里插入图片描述

将打包目录拷贝到开发板

我这里通过两步实现文件拷贝,先将打包目录拷贝到 nfs 挂载目录,再将打包目录拷贝到开发板根目录,

在这里插入图片描述
在这里插入图片描述

测试 ssh

由于使用 ssh 登录 root 用户必须要密码,所以如果开发板系统没有设置 root 密码,先输入 passwd 进行设置,

在这里插入图片描述

在开发板串口终端输入 /usr/local/bin/sshd 启动 ssh 服务,

在这里插入图片描述

可以通过 ps 命令查看该命令是否成功执行,

在这里插入图片描述

在 PC 上(前提是网络互通)使用 ssh 命令连接开发板:

在这里插入图片描述

或者使用 putty 工具(需要安装),

在这里插入图片描述
在这里插入图片描述

成功连接上开发板 ssh:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43772810/article/details/129517286