在以前的 Ubuntu 版本和当前版本的 Debian 中,您可以在启动时通过 SSH 解锁完全加密的系统(使用 dmcrypt 和 LUKS)。
它非常简单:
- 使用 Ubuntu 备用安装程序磁盘或普通 Debian 安装程序磁盘安装加密系统并选择加密系统。
- 系统安装完成后,添加dropbear和busybox包。
- 更新 initram-fs 以授权您的 ssh 密钥。
在启动时,你只需 ssh 到机器,然后执行:
echo -ne "keyphrase" > /lib/cryptsetup/passfifo
然后机器就会解锁并启动加密系统。
在 Ubuntu 11.10 上使用完全相同的步骤,我可以 ssh 到该机器,但/lib/cryptsetup/passfifo
不存在。
似乎没有办法通过 ssh 解锁系统。我不确定在哪里可以查看此功能是否已更改或是否已被删除。
答案1
刚刚在谷歌上搜索了一下,发现 plymouth 似乎妨碍了。如果 plymouth 存在,则在启动时,cryptsetup 会要求 plymouth 输入密码,这意味着它不使用 passfifo。
最好的解决方法似乎是将以下脚本放入目录中。/usr/share/initramfs-tools/hooks/
将其放入目录中后,chmod +x
您就可以了update-initramfs -u
。然后您应该能够使用该unlock
命令(由下面的脚本创建)。
这依赖于你使用 ssh 密钥登录。如果你想使用密码,那么你需要SSHUSERPASS=<username>
输入/etc/initramfs-tools/initramfs.conf
#!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions
if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" <<-EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot
then
/sbin/pkill cryptroot
/sbin/pkill -f "plymouth ask-for-pass"
/sbin/pkill cryptsetup
exit 0
fi
exit 1
EOF
chmod 755 "${DESTDIR}/bin/unlock"
mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" <<-EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
chmod 755 "${DESTDIR}/lib/unlock/plymouth"
# Enable password login
if [ -n "$SSHUSERPASS" ]
then
sed -n "s/^${SSHUSERPASS}:/root:/p" /etc/shadow > "${DESTDIR}/etc/shadow"
chmod 640 "${DESTDIR}/etc/shadow"
fi
fi
答案2
直到这个错误问题解决后,您可以尝试先终止 plymouth。不幸的是,没有简单的方法可以确定 plymouthd 的 PID。但 plymouth 知道如何自行退出 :-) 因此,下面的操作应该足够了。
plymouth --quit; echo -ne "keyphrase" > /lib/cryptsetup/passfifo