安装加密的 Debian 13(Trixie),推荐配置 dropbear-initramfs 来通过 SSH 远程输入解密密码。(比登录去服务商面板用vnc方便)

以下是详细的操作指南:


一、 安装阶段(Debian Installer)

启动 ISO 或者netboot开始安装,建议选择 Text Install

1. 磁盘分区 (关键步骤)

在分区界面,请按以下方案操作:【更精细的方案可以选手动】

  • 方案选择:选择 Guided - use entire disk and set up encrypted LVM(向导 - 使用整个磁盘并设置加密 LVM)。
  • 分区结构:

    • /boot 分区:必须是非加密的,否则引导程序无法启动。
    • LVM 卷组:剩下的空间会被加密。
  • 密码设置:设置密码。注意: 可以不是建议的20位以上 但也别太简单。 这个以后在系统里改。

2. 软件选择

  • 核心系统:仅勾选 SSH server 和 standard system utilities。

二、 配置远程解锁 (Dropbear)

安装完成后重启,你会发现机器停在等待密码的界面。此时必须通过 VNC 进入系统,然后配置 SSH 远程解锁,否则以后每次重启都要开 VNC。

1. 安装 dropbear-initramfs

进入系统后执行:

Bash

apt update
apt install dropbear-initramfs

2. 配置公钥

为了安全,建议仅使用 Key 登录。编辑 /etc/dropbear/initramfs/authorized_keys,加入你的公钥:

Bash

nano /etc/dropbear/initramfs/authorized_keys

3. 配置网络(针对静态 IP)【如果是仅v6,情况很可能复杂一些,涉及v6的分配方式和启动顺序】

如果你的 VPS 不是通过 DHCP 获取 IP,需要手动指定 initramfs 启动时的网络。编辑 /etc/initramfs-tools/initramfs.conf:

找到 IP= 行,按以下格式填写:

IP=[装置IP]::[网关]:[子网掩码]:[主机名]:[网卡名]:off

例如:IP=192.168.1.100::192.168.1.1:255.255.255.0:debian-vps:eth0:off

4. 更新 initramfs

Bash

update-initramfs -u

三、 如何远程解锁?

以后重启 VPS 时,在你的本地终端输入:

Bash

ssh root@your-ip -p 2222 -i /YOUR-KEY-FILE
#22建议修改,避免你的终端总是提示psk key冲突。
注意:Initramfs 下的 Dropbear 默认通常监听 22 端口。如果与主系统冲突,可以在 /etc/dropbear/initramfs/dropbear.conf 中通过 DROPBEAR_OPTIONS="-p 2222" 修改。

登录后执行以下命令并输入密码:

Bash

cryptroot-unlock

解密成功后,Dropbear 会自动断开,随后主系统的 SSH 服务会接管。


四、 资源优化建议 针对CPU和内存局限

由于磁盘空间较小且 CPU 为单核,建议进行以下优化:

1. 调整 Swap

加密磁盘上的 Swap 性能损耗较大。如果 2GB 内存不够用,建议使用 Zram 代替物理 Swap 分区。(如果只有1G,那还是建议增加个swapfile或分区)

Bash

apt install zram-tools

2. 磁盘挂载参数

编辑 /etc/fstab,在挂载选项中加入 noatime 以减少加密磁盘的写入开销:

| 挂载点 | 选项 |

| / | defaults,noatime |

3. 优化配置:编辑 /etc/default/zramswap:

  • ALGO=zstd (平衡压缩率与速度)。
  • PERCENT=50 (将比如2G内存的一半,即 1GB,划给 zram 使用,压缩后可提供约 2GB+ 的虚拟空间)。


有的vps服务商不能在grub环节获得ip地址,需要等待系统启动。那么dropbear就会连接不上。
最简单的是把ip设置加入grub的启动项。(仅v6的情况可能更复杂)

编辑/etc/default/grub


1. IPv4 的标准写法

在 /etc/default/grub 中,IPv4 的完整格式为:

# 格式:ip=<客户端IP>:<NFS服务器IP(留空)>:<网关IP>:<子网掩码>:<主机名>:<网卡名>:<自动配置(off)>
GRUB_CMDLINE_LINUX_DEFAULT="quiet net.ifnames=0 biosdevname=0 ip=1.2.3.4::1.2.3.1:255.255.255.0:your-hostname:eth0:off"
  • 255.255.255.0:这里必须写完整的掩码。如果你的掩码是 /32(某些云服务商提供单 IP 路由),则写 255.255.255.255。
  • 双冒号 :::中间空出的位置是给 NFS 服务器用的,在远程解锁场景中必须留空并保持两个冒号。

2. IPv4 vs IPv6 写法对比

由于你这台 1C2G 的机器配置了加密磁盘,建议参考下表确保配置准确:

类型掩码/前缀格式示例配置片段
IPv4点分十进制ip=1.2.3.4::1.2.3.1:255.255.255.0:hb1:eth0:off
IPv6数字前缀ip=[2a07...]::[2a07...]:64:your-hostname:eth0:off

更新配置:修改完 /etc/default/grub 后,务必执行:

/usr/sbin/update-grub && \
/usr/sbin/update-initramfs -u

修改 LUKS 密码

进入系统后(不再是 initramfs 提示符),打开终端执行以下命令:

1. 确认加密设备名称

Bash

lsblk

你应该能看到 vda3 下方挂着一个类型为 crypt 的设备。

2. 添加新密码

LUKS 支持多个密码槽(Keyslots)。建议先添加新密码,确认无误后再删除旧密码,防止操作失误导致无法开机。

Bash

# 系统会要求你先输入一个已有的旧密码进行验证,然后输入两次新密码
sudo cryptsetup luksAddKey /dev/vda3

3. 测试新密码(可选但建议)

如果你想确保新密码生效了:

Bash

# 这不会改变任何东西,只是测试密码是否能正确打开设备
sudo cryptsetup luksDump /dev/vda3

检查输出中的 Key Slot 是否多了一个被占用的位置。

4. 删除旧密码(可选)

如果你确定不再需要旧密码,或者担心旧密码泄露:

Bash

sudo cryptsetup luksRemoveKey /dev/vda3

系统会提示你输入要删除的那个密码。千万别把刚设的新密码给删了。


第三步:同步更新(重要)

由于你使用了 Dropbear 进行远程解锁,修改完磁盘密码后,最好更新一下 initramfs 镜像,确保引导环境识别最新的加密状态:

Bash

sudo update-initramfs -u
sudo update-grub

如果你完全忘记了旧密码...

  • 没有后门: LUKS 加密如果没有旧密码或备份的 Header Key,是无法重置密码的。
  • 唯一办法: 你需要使用 VPS 控制面板的 "Reinstall"(重装系统)功能,这会导致 vda3 上的所有数据丢失。

在 LUKS 加密体系中,Header(头部) 是整个加密分区的“大脑”。

当你给磁盘设置密码时,系统并不是直接用你的密码去加密整个硬盘的数据。相反,它会随机生成一个非常复杂的 Master Key(主密钥) 来加密数据,而你的用户密码只是用来解锁这个 Master Key 的“钥匙”。

什么是 LUKS Header?

Header 存储在加密分区的开头(通常是前几个 MB),它包含了:

  • 加密算法信息: 用的是 AES-256 还是其他方式。
  • Key Slots(密码槽): LUKS 最多支持 8 个槽位,每个槽位可以存放一个被加密过的 Master Key 副本。
  • Master Key 的加密副本: 只有输入正确的用户密码,才能解开槽位拿到 Master Key。

为什么备份它很重要?

如果这个 Header 损坏了(比如由于意外断电、磁盘坏道,或者你执行了误操作),即使你记得密码,里面的数据也永远无法找回。因为 Master Key 丢失了,整个硬盘就成了一堆无法解密的随机垃圾字符。

“备份 Header Key” 实际上就是把这个头部的元数据提取出来存成一个独立文件。


如何备份和恢复?

如果你现在还能进系统(或者以后为了安全),你应该这样做:

1. 备份(导出)

将 vda3 的头部备份到外部存储(千万别存在这个加密盘里!):

Bash

sudo cryptsetup luksHeaderBackup /dev/vda3 --header-backup-file my_vda3_header.img

2. 恢复(导入)

如果有一天 Header 坏了,或者你想把密码重置回备份时的状态:

Bash

sudo cryptsetup luksHeaderRestore /dev/vda3 --header-backup-file my_vda3_header.img

⚠️⚠️⚠️

  • 如果你有备份: 万一你把密码改乱了,或者改完后发现新密码进不去,你可以用备份文件“强行”恢复回之前的状态。
  • 如果你没有备份: 那么修改密码时一定要非常小心。建议先用 luksAddKey 增加一个新密码,确认能开机后,再删除旧的。

更新一个配置

nano /etc/dropbear/initramfs/dropbear.conf
DROPBEAR_OPTIONS="-I 180 -j -k -p 2222 -c cryptroot-unlock"