给云服务器加密系统盘,并用 SSH 远程解锁

本文章完全是由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

三、常见坑

  1. 密钥文件放在未加密的地方 —— 加密就白做了,务必核对挂载点。
  2. 数据盘误入 initramfs —— 会要求输两次密码。
  3. dropbear 占用 22 —— 和正常 sshd 冲突,改端口。
  4. initramfs 里网卡名和系统里不一样 —— 用静态 IP 时尤其容易翻车,所以一定要留 VNC 兜底。
  5. 用 UUID 不用 /dev/sdX —— 换盘、克隆的时候省事。
  6. 数据盘保留原密码槽 —— 密钥文件出问题还能兜底。

整套配好之后:重启 → ssh -p 2222 输一次系统盘密码 → 系统起来,数据盘自动挂好。不用 VNC,也能塞进自动化流程。

除非另有说明,本博客中的所有文章均采用 CC BY-NC-SA 3.0 中国大陆 授权。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇