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

Jef*_*eff 8 ssh security boot luks encrypted-partition

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

这很简单:

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

在启动时,您只需通过 ssh 连接到机器,然后执行以下操作:

echo -ne "keyphrase" > /lib/cryptsetup/passfifo
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ham*_*ner 4

刚刚做了一些谷歌搜索,看来普利茅斯妨碍了。如果 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
Run Code Online (Sandbox Code Playgroud)

您可以在 ubuntuforums 上的这篇文章这个启动板错误以及我从其中截取的德国帖子中阅读更多内容。


Fre*_*ord 2

在这个bug解决之前,你可以尝试先杀死普利茅斯。不幸的是,没有简单的方法来确定 plymouthd 的 PID。但普利茅斯知道如何退出:-) 所以以下内容应该足够了。

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