这主要针对 Debian/Ubuntu,但我觉得自己对各种发行版足够了解,能够将一个发行版的解决方案适应另一个发行版。
这是我的场景。在某些情况下,引导过程会将您带到 initrd 的 shell(通常是 busybox)。最值得注意的是,每当您运行硬件 RAID 时,都必须为每个新的内核版本重新构建驱动程序。我希望能够像访问完全启动的系统一样访问救援系统。
我认为可以将 shell 和sshd
(OpenSSH 或 dropbear)的静态构建放入 initrd 中,并且一直在寻找可以根据需要进行调整的现有解决方案。
假设没有现有的解决方案(因为我已经搜索了很长一段时间),除了尽可能使用静态构建(或提供库)之外,我还需要考虑什么?简单地缓存 dropbear 的静态构建并将/etc/initramfs-tools/hooks
其与“转换后的”OpenSSHsshd_config
和原始主机密钥一起嵌入是否合理?
答案1
Ubuntu 16.04 包含一个名为dropbear-initramfs
应该提供此功能。
轻量级 SSH2 服务器和客户端 - initramfs 集成 dropbear 是一款 SSH 2 服务器和客户端,其设计足够小,可以在小内存环境中使用,同时仍然具有足够的功能和安全性,适合一般用途。
它实现了 SSH 2 协议的大多数必需功能,以及 X11 和身份验证代理转发等其他功能。
该软件包提供 initramfs 集成。
除了安装所述软件包之外,我唯一需要调整的项目是:
DROPBEAR=y
取消里面注释掉的内容/etc/initramfs-tools/conf-hooks.d/dropbear
- 转换我现有的主机密钥(见下文)
- 创建并填充
/etc/initramfs-tools/root/.ssh/authorized_keys
.为此,我选择绑定安装/root/.ssh
到/etc/initramfs-tools/root/.ssh
- 最后
update-initramfs -u -k all
重新创建了所有 initrd 映像
为了转换密钥,我运行了以下命令:
/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_rsa_key /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key
/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_dsa_key /etc/initramfs-tools/etc/dropbear/dropbear_dss_host_key
/usr/lib/dropbear/dropbearconvert openssh dropbear /etc/ssh/ssh_host_ecdsa_key /etc/initramfs-tools/etc/dropbear/dropbear_ecdsa_host_key
笔记:源文件名和目标文件名不同。所以不要在这里做出假设。另外,/usr/lib/dropbear
不在我的中PATH
,所以我需要提供执行的完整路径dropbearconvert
。