本文章完全是由AI(deepseek-flash)编写的,真方便呀。
云服务器上了全盘加密之后,每次重启都得开 VNC 输密码,一来 VNC 慢,二来自动化脚本没法跑。其实可以让 initramfs 里跑一个 SSH 服务,重启后用 ssh 连进去输密码就行。顺带把数据盘也搞定:系统盘一解锁,数据盘自动跟着解锁。
环境以 Debian 12 / Ubuntu 22.04+ 为例。
一、系统盘加密 + initramfs 里的 SSH
1. 装加密系统
云厂商的重装面板一般没有”加密系统盘”选项,需要走救援模式 / 挂载 ISO 手动装,分区时勾 LUKS。注意 /boot 不要加密(GRUB 读不了),只加密根分区和 swap。
2. 安装 dropbear-initramfs
apt update
apt install -y dropbear-initramfs cryptsetup-initramfs
3. 配置公钥和端口
echo "ssh-ed25519 AAAAC3... you@laptop" >> /etc/dropbear/initramfs/authorized_keys
chmod 600 /etc/dropbear/initramfs/authorized_keys
编辑 /etc/dropbear/initramfs/dropbear.conf:
DROPBEAR_OPTIONS="-p 2222 -j -k -s -I 60"
-p 2222:不要用 22,会和正常启动后的 sshd 冲突-s:禁用密码登录,只允许公钥
4. 网络用 DHCP
/etc/initramfs-tools/initramfs.conf 里确保:
IP=dhcp
5. 重建 initramfs
update-initramfs -u -k all
lsinitramfs /boot/initrd.img-$(uname -r) | grep -i dropbear # 确认打进去了
6. 重启解锁
放行安全组 2222 端口,保留 VNC 兜底,然后:
reboot
ssh -p 2222 root@<服务器IP>
连进去会看到:
To unlock root partition, and maybe others like swap, run `cryptroot-unlock`.
BusyBox v1.37.0 (Ubuntu 1:1.37.0-7ubuntu1) built-in shell (ash)
Enter 'help' for a list of built-in commands.
输入 cryptroot-unlock 开始解锁 (这段AI给忘了)
# cryptroot-unlock
Please unlock disk dm_crypt-0:
cryptsetup: dm_crypt-0 set up successfully
# Connection to x.x.x.x closed by remote host.
输入 LUKS 密码即可,之后正常系统起来,再走 22 端口 SSH。
二、数据盘随系统盘自动解锁
思路:把数据盘的 LUKS 密钥文件放在已加密的系统盘里。系统盘解锁 → 根挂载 → 读出密钥 → 自动解锁数据盘。密钥本身在加密盘里,安全性不降。
1. 生成密钥文件
mkdir -p /etc/luks-keys
dd if=/dev/urandom of=/etc/luks-keys/data.key bs=512 count=8
chmod 600 /etc/luks-keys/data.key
确认 /etc/luks-keys 确实落在加密分区上(lsblk 看一眼父设备是不是 crypt)。
2. 把密钥加进数据盘
cryptsetup luksAddKey /dev/sdb /etc/luks-keys/data.key
3. 写 crypttab
/etc/crypttab:
data_crypt UUID=<数据盘LUKS UUID> /etc/luks-keys/data.key luks,discard,nofail
4. 写 fstab
mkdir -p /data
blkid /dev/mapper/data_crypt
/etc/fstab:
UUID=<文件系统UUID> /data ext4 defaults,nofail 0 2
5. 确认数据盘不在 initramfs 里
否则会变成要输两次密码。
grep -r data_crypt /etc/initramfs-tools/ /etc/crypttab.initramfs 2>/dev/null
有就删掉,然后
update-initramfs -u -k all
重启验证:
lsblk
mount | grep /data
三、常见坑
- 密钥文件放在未加密的地方 —— 加密就白做了,务必核对挂载点。
- 数据盘误入 initramfs —— 会要求输两次密码。
- dropbear 占用 22 —— 和正常 sshd 冲突,改端口。
- initramfs 里网卡名和系统里不一样 —— 用静态 IP 时尤其容易翻车,所以一定要留 VNC 兜底。
- 用 UUID 不用
/dev/sdX—— 换盘、克隆的时候省事。 - 数据盘保留原密码槽 —— 密钥文件出问题还能兜底。
整套配好之后:重启 → ssh -p 2222 输一次系统盘密码 → 系统起来,数据盘自动挂好。不用 VNC,也能塞进自动化流程。