我在 VPS 上安装了 Debian 9,并将根分区配置为加密。但是,由于安装程序在尝试加密时出现问题,因此我不得不手动执行此操作。
为了能够在启动期间通过 SSH 解锁根分区,我还使用 安装dropbear-initramfs
并更新了 initramfs update-initramfs -u
。启动时,我现在能够连接到服务器dropbear
。
登录过程cryptroot-unlock
(通过 SSH 登录时自动调用)失败并显示以下错误消息:
Error: Timeout reached while waiting for askpass.
并关闭连接。
我在网上没有找到关于这个确切的错误信息的任何信息,并试图确保我没有犯任何配置错误,但到目前为止似乎没有任何帮助。
目前,我能够使用救援实时系统 chroot 进入系统;我该怎么做才能修复这个错误?
答案1
我自己能够解决这个问题,但也许其他人也会遇到同样的问题,所以我将在这里发布解决方案:
事实证明,我的/etc/crypttab
有语法错误,导致askpass
(除其他外)在运行时未包含在 initramfs 中update-initramfs -u
。
对我来说,将每个单独的逻辑卷添加到卷组中就足够了,/etc/crypttab
而不是将整个卷组添加到卷组中。以下是示例:
#name underlying device passphrase cryptsetup options
vg-root /dev/mapper/vg-root none luks,retry=1
vg-swap /dev/mapper/vg-swap none luks,retry=1
再次更新 initramfs 后,您的系统应该在启动时要求输入逻辑卷密码,然后恢复正常启动。
答案2
写这篇文章是因为我在尝试解决同一问题时发现了这个帖子卡利Linux。
特别是在 Kali 上,默认安装了一个软件包cryptsetup-nuke-password
。它将 /lib/cryptsetup/askpass 替换为一个脚本,该脚本调用原始的“askpass”二进制文件并将 askpass 重命名为 /lib/cryptsetup/askpass.cryptsetup (看这里), 使用时会导致完全相同的错误cryptroot-unlock
:
Error: Timeout reached while waiting for askpass.
一种可能的解决方案是编辑/usr/share/cryptsetup/initramfs/bin/cryptroot-unlock
指向/lib/cryptsetup/askpass.cryptsetup
而不是/lib/cryptsetup/askpass
:
ASKPASS=/lib/cryptsetup/askpass.cryptsetup