如何在启动时通过SSH解锁完全加密的Ubuntu 11.10系统?

在以前版本的Ubuntu和当前版本的Debian中,您可以在启动时通过SSH解锁完全加密的系统(使用dmcrypt和LUKS)。

它很简单:

  1. 使用Ubuntu备用安装程序磁盘或普通Debian安装程序磁盘安装加密系统,然后选择加密系统。
  2. 安装系统后,添加dropbear和busybox包。
  3. 更新initram-fs以授权您的ssh密钥。

在启动时,你只需要ssh到机器,并执行:

echo -ne "keyphrase" > /lib/cryptsetup/passfifo 

然后,机器将解锁并启动加密系统。

在Ubuntu 11.10上使用完全相同的步骤,我可以ssh到机器,但/lib/cryptsetup/passfifo不存在。

似乎无法通过ssh解锁系统。 我不知道在哪里查看此function是否已更改或是否已删除。

刚做了一些谷歌搜索,似乎普利茅斯阻碍了。 如果普利茅斯在那里,那么在启动时,cryptsetup将向普利茅斯询问密码,这意味着它不使用passfifo。

最好的解决方法似乎是将以下脚本放在目录/usr/share/initramfs-tools/hooks/将它放在那里后你可以chmod +x然后你必须update-initramfs -u 。 然后,您应该能够使用unlock命令(由下面的脚本创建)。

这取决于您使用ssh密钥登录。 如果你想使用密码,那么你需要将SSHUSERPASS=放入/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 

你可以在这篇文章中阅读更多关于ubuntuforums , 这个启动板错误以及我 从中删除 大部分内容的德语post 。

直到这个错误得到解决,你可以尝试先杀死普利茅斯。 不幸的是,没有简单的方法来确定普利茅斯的PID。 但普利茅斯知道如何戒掉自己:-)所以以下内容应该足够了。

plymouth --quit; echo -ne "keyphrase" > /lib/cryptsetup/passfifo