在 Linux 系统中,如果你的两块硬盘(例如 sda 作为根系统盘,sdb 作为数据盘)都进行了 LUKS 加密,使用 Dropbear SSH 进行远程解锁是非常经典的无头服务器(Headless Server)解决方案。
针对这种情况,通常有两种架构方案。我将为你详细梳理这两种方法的配置逻辑。
方案一:Dropbear 解锁根盘 + Keyfile 自动解锁数据盘(
最推荐的行业标准)
这是最优雅且最常见的做法。你只需要通过 Dropbear SSH 输入一次密码来解锁包含操作系统的 sda。系统启动并挂载根目录后,会自动读取根目录内的密钥文件(Keyfile)来静默解锁 sdb。
第一步:配置 Dropbear 以解锁 sda(根分区)
- 安装必要的包(以 Debian/Ubuntu 为例):
sudo apt install dropbear-initramfs cryptsetup - 将你本机的 SSH 公钥(
id_rsa.pub或id_ed25519.pub)添加到 initramfs 的 Dropbear 授权文件中:sudo nano /etc/dropbear/initramfs/authorized_keys - 确保你的服务器在 initramfs 阶段能获取 IP 联网。编辑
/etc/initramfs-tools/initramfs.conf,在末尾添加网络配置(根据实际情况调整 DHCP 或静态 IP):IP=:::::eth0:dhcp - 更新 initramfs 生效:
sudo update-initramfs -u
第二步:使用 Keyfile 自动解锁 sdb
- 在已解锁的根分区创建一个安全的密钥文件:
sudo mkdir -p /etc/luks-keys sudo dd if=/dev/urandom of=/etc/luks-keys/sdb_key bs=1024 count=4 sudo chmod 0400 /etc/luks-keys/sdb_key - 将这个密钥文件添加到
sdb的 LUKS 密钥槽中(会要求你输入一次sdb当前的加密密码):sudo cryptsetup luksAddKey /dev/sdbX /etc/luks-keys/sdb_key - 配置
/etc/crypttab让系统启动时自动读取该文件:# <target name> <source device> <key file> <options> sdb_crypt UUID=你的sdb_UUID /etc/luks-keys/sdb_key luks - 在
/etc/fstab中配置自动挂载/dev/mapper/sdb_crypt。
使用体验: 重启后,你只需 SSH 进入 Dropbear,运行 cryptroot-unlock 并输入 sda 的密码。系统启动后会自动解锁并挂载 sdb。
方案二:在 Dropbear 中手动依次解锁 sda 和 sdb
如果出于极高的安全合规要求,你绝对不能在根分区中明文存储 sdb 的 Keyfile,那么你可以强制 initramfs 阶段同时识别这两个盘,并通过 Dropbear 依次输入密码。
第一步:强制将 sdb 包含入 initramfs
默认情况下,initramfs 只关心启动系统所需的根分区。你需要通过修改 /etc/crypttab 强制它加载 sdb。
- 编辑
/etc/crypttab,在sdb的选项中加入initramfs标志:
注意:使用# <target name> <source device> <key file> <options> sda_crypt UUID=你的sda_UUID none luks,initramfs sdb_crypt UUID=你的sdb_UUID none luks,initramfsnone表示启动时需要手动输入密码。
第二步:更新 initramfs
重新生成引导镜像,将两个加密卷的配置打包进去:
sudo update-initramfs -u
第三步:远程解锁体验
-
服务器重启卡在引导阶段时,通过 SSH 连接到 Dropbear:
ssh root@你的服务器IP -p 22 # (或者根据 dropbear 默认配置,端口可能是 2222,且有时候需要特定的 SSH 密钥) -
登录后,通常会进入一个 BusyBox shell。运行官方解锁脚本:
cryptroot-unlock -
此时,脚本会依次弹窗要求你输入:
Please unlock disk sda_crypt:(输入 sda 的密码)Please unlock disk sdb_crypt:(输入 sdb 的密码)
-
两次输入正确后,Dropbear 会自动关闭连接,服务器继续正常的启动流程。
核心建议
对于 99% 的场景,强烈建议采用 方案一。
方案二虽然全手动,但在实际运维中非常繁琐(每次重启都要输两次独立密码),且一旦输错一个,容易导致 initramfs 超时而彻底卡死,需要接物理显示器才能救砖。采用方案一,只要保护好根分区的安全,数据盘的安全性是同等级的。