一、在 Buildroot 中启用 OpenSSH
要在 Buildroot 中启用 OpenSSH 作为 SSH 服务器,请按以下步骤操作:
1. 启用 OpenSSH 包
首先,打开 Buildroot 的配置界面:
make menuconfig
进入 menuconfig
界面后,按照以下路径操作:
- 选择
Target packages
- 选择
Networking applications
- 找到并启用
openssh
(这是 OpenSSH 服务器和客户端的包)
选择 openssh
后,可以进一步进入 OpenSSH 的子选项来调整具体配置,如是否启用客户端、是否使用 scp
等。
2. 配置 OpenSSH
OpenSSH 需要一些基本的配置才能正常运行。你可以通过创建自定义的 SSH 配置文件来完成这一点:
- 在根文件系统中创建
/etc/ssh/sshd_config
文件,并在其中设置 SSH 服务器的配置。例如:
PermitRootLogin yes
PasswordAuthentication yes
这将允许 root 用户登录,并启用密码验证。
3. 生成 SSH 密钥
在构建时生成 SSH 密钥是必要的。为此,你可以在目标设备首次启动时自动生成密钥。你可以通过添加脚本或修改 post-build
钩子来实现自动生成密钥。
在 Buildroot 中,你可以编写一个自定义的 post-build
脚本,将 SSH 密钥生成命令加进去。脚本可以类似于:
#!/bin/sh
mkdir -p /etc/ssh
ssh-keygen -A
你也可以在设备启动时通过命令生成密钥:
ssh-keygen -A
4. 启用 OpenSSH 服务
要确保 OpenSSH 在设备启动时自动运行,你可以修改 inittab
或添加一个 init.d
脚本。例如,在 Buildroot 中的 System configuration
中找到并配置 inittab
,并确保 OpenSSH 服务被启动。通常,可以通过在 /etc/inittab
文件中添加类似以下内容来启用:
::respawn:/usr/sbin/sshd -D
这将确保 sshd
作为守护进程启动。
5. 设置 root 用户密码
如果你希望允许通过 SSH 以 root
用户身份登录,需要设置 root 用户的密码。你可以通过以下步骤设置密码:
- 在
System configuration
中找到并设置 root 用户的密码,或通过命令行手动设置。
6. 构建并烧录系统
完成上述配置后,重新构建 Buildroot:
make
然后将生成的映像烧录到设备上。
7. 测试 OpenSSH
系统启动后,可以通过以下命令从其他设备连接到目标设备:
ssh root@<目标设备IP>
如果配置正确,你应该可以通过 SSH 连接到设备。
二、设置 OpenSSH 开机启动
在较新的 Buildroot 版本中,inittab
的管理方式有所变化,可能不再在 System configuration
中直接提供配置选项。如果找不到 inittab
配置,您可以通过以下步骤来启用 OpenSSH 并确保它在启动时运行。
1. 使用 BusyBox 的 inittab
启动项
即使在 menuconfig
中没有找到直接的 inittab
选项,Buildroot 通常仍然使用 BusyBox
来管理系统的初始化过程。您可以手动编辑或定制 Buildroot 生成的根文件系统中的 /etc/inittab
文件。
方法一:编辑 inittab
Buildroot 默认生成的 inittab
文件位于 output/target/etc/inittab
。你可以在构建后编辑这个文件,或者通过以下方式自定义它:
-
创建自定义
overlay
来覆盖默认的/etc/inittab
mkdir -p board/custom_overlay/etc/
-
在
board/custom_overlay/etc/
中创建inittab
文件:touch board/custom_overlay/etc/inittab
-
编辑这个
inittab
文件,添加 OpenSSH 启动行:# /etc/inittab example for OpenSSH ::sysinit:/etc/init.d/rcS ::respawn:/usr/sbin/sshd -D
-
将该目录指定为 Buildroot 的根文件系统覆盖目录:
打开
menuconfig
:make menuconfig
然后进入以下选项:
System configuration -> Root filesystem overlay directories
在这里输入
board/custom_overlay
,确保 Buildroot 在构建根文件系统时会包含你自定义的inittab
。
-
方法二:使用 init 脚本
如果你不想直接修改 inittab
,也可以使用 init 脚本来启动 OpenSSH。你可以编写一个 init.d
脚本。
-
创建自定义 OpenSSH 启动脚本
-
在
overlay
目录下创建/etc/init.d/S50sshd
文件:mkdir -p board/custom_overlay/etc/init.d/ touch board/custom_overlay/etc/init.d/S50sshd
-
编辑
S50sshd
文件,添加启动 OpenSSH 的命令:#!/bin/sh case "$1" in start) echo "Starting OpenSSH server..." /usr/sbin/sshd ;; stop) echo "Stopping OpenSSH server..." killall sshd ;; restart) echo "Restarting OpenSSH server..." killall sshd /usr/sbin/sshd ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0
-
确保该脚本是可执行的:
chmod +x board/custom_overlay/etc/init.d/S50sshd
-
-
将
overlay
添加到 Buildroot 配置中和方法一相同,在
menuconfig
中指定overlay
目录。
2. 构建系统
完成所有配置后,重新构建 Buildroot:
make
生成的系统映像将包含 OpenSSH 并在启动时自动启动。
3. 烧录并测试
将生成的映像烧录到目标设备上,启动后你可以尝试通过 SSH 登录:
ssh root@<目标设备IP>
这样可以确保 OpenSSH 在系统启动时自动运行。
三、在 Buildroot 中启用 Dropbear
在 Buildroot 中启用 Dropbear(一个轻量级的 SSH 服务器和客户端)是一个相对简单的过程。以下是详细步骤:
1.启动 Buildroot 配置界面:
-
在 Buildroot 的根目录下,运行以下命令以启动配置界面:
make menuconfig
2.启用 Dropbear:
- 在配置界面中,导航到
Package
菜单。 - 选择
Networking applications
。 - 找到并选择
Dropbear
。 - 确保
Dropbear
被选中,并且其下的选项根据需要进行配置(例如,选择是否启用 SSH 客户端功能)。
3.配置系统:
- 导航到
System configuration
。 - 在
System configuration
中,确保Dropbear
被启用(通常在这里你可以设置 root 密码,配置网络等)。
4.保存并退出:
- 完成配置后,保存设置并退出配置界面。
5.编译 Buildroot:
-
运行以下命令编译 Buildroot:
make
6.部署和测试:
-
将编译生成的镜像和文件系统部署到目标设备上。
-
启动目标设备,并检查 Dropbear 是否正常运行:
ps | grep dropbear
-
从主机系统尝试通过 SSH 连接到目标设备:
ssh root@<target-ip-address>
7.配置 SSH 密码(如果需要):
- 你可以通过设置 root 密码来确保能够使用 SSH 登录。默认情况下,Buildroot 的 root 密码是空的。你可以在 Buildroot 配置界面的
System configuration
中设置 root 密码。
四、Dropbear 和 OpenSSH 的区别
Dropbear 和 OpenSSH 是两种用于嵌入式系统和服务器的 SSH 实现,它们各自有一些特点和优势,适用于不同的场景。
1. 体积和资源占用
- Dropbear:设计为轻量级 SSH 服务器,特别适用于嵌入式系统或资源有限的设备(例如路由器、IoT 设备)。二进制文件较小,内存和 CPU 占用也较低。
- OpenSSH:功能更全,通常用于功能齐全的服务器和工作站,占用的内存和磁盘空间比 Dropbear 大。
2. 功能和特性
- Dropbear:提供基本 SSH 功能,不支持 OpenSSH 的所有高级特性。
- OpenSSH:功能完整,支持复杂的 SSH 配置、隧道、代理转发、加密代理等。
3. 安全性和加密
- Dropbear:支持的加密算法较少,适合嵌入式设备的安全需求。
- OpenSSH:支持更多种类的加密算法和认证机制,适合更高级的安全需求。
4. 启动速度
- Dropbear:启动更快,适合嵌入式设备。
- OpenSSH:由于功能较多,启动速度略慢,但在大多数服务器上影响不大。
5. 应用场景
- Dropbear:适合资源有限的设备,如路由器、IoT 设备等。
- OpenSSH:适合功能全面的服务器、工作站和需要复杂 SSH 特性的大型网络环境。