通过您的客户端连接并解锁加密分区来启动您的服务器

通过您的客户端连接并解锁加密分区来启动您的服务器

我正在尝试解锁运行加密版 Ubuntu 14.04 的无头服务器。这是一个干净的 14.04.2 安装,包含截至撰写本文时的所有更新。

dropbear我经历了和的标准恶作剧busybox,即:

# INSTALL
sudo apt-get install dropbear busybox           # on server

# ENABLE AND CONFIGURE IP
sudo sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropber
sudo sed -i 's/BUSYBOX=y/BUSYBOX=y\nDROPBEAR=y\n/g' \
            /etc/iniramfs/iniramfs.conf
sudo sed -i 's/DEVICE=.+/DEVICE=etho0/g' \
             /etc/iniramfs/initramfs.conf
sudo sed -i 's/IP=.+/IP=IP=192.168.0.11:::255.255.255.0::eth1:off' \
            /etc/initramfs/initramfs.conf
sudo update-initramfs

# COPY DROPBEAR SSH KEY
# WRONG: sudo cp /etc/dropbear/dropbear_*_host_key /tmp
sudo cp /etc/initramfs-tools/root/.ssh/id_rsa /tmp             # BETTER!
sudo chown $USER:$USER /tmp/id_rsa

scp server:/tmp/id_rsa ~/.ssh/id_rsa_dropbear_server           # on client

sudo reboot                                                    # on server

# CONNECT TO SERVER
ssh -vv -i ~/.ssh/id_rsa_dropbear_server \
        -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' \ 
         [email protected]                                     # on client

于是我复制了自动生成的 ssh-key,并对 dropbear 进行了最小配置。令我惊讶的是,有两三件事出现了故障:

  1. 系统忽略了 IP 设置。我在路由器的“已连接设备”站点中发现,192.168.0.27尽管我进行了配置,但服务器还是有 IP。因此,我尝试使用列出的错误 IP:。这连接到 dropbear,但是:ssh -vv -i ~/.ssh/dropbear_dss_host_key -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' [email protected]
  2. Dropbear 忽略了除其自身之外的所有公钥/etc/initramfs-tools/root/.ssh/authorized_keys(已使用 dss 测试 - 可能还有 rsa)。
    已解决:Dropbear 需要密钥的密码,但我没有。所以我尝试了一个空密码。这样 dropbear 就转到密码验证并需要 root 密码,但该密码未设置。
  3. 自定义钩子脚本似乎部分被忽略了。这些是在旧安装中工作的脚本!

以下是全部内容ssh 会话

我将常用的公钥文件添加到服务器中 dropbear 的已知主机/etc/initramfs-tools/root/.ssh/authorized_keys,并尝试使用常用密钥进行 ssh 连接。但没用。

我将该行添加GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"到服务器/etc/default/grup并更新了组。这是为了修复 IP 问题。但这也没有用。

我现在彻底恼火了,忍无可忍。我哪里做错了?另外,IP 设置的语法是否正确,因为一个指南说::eth0:off,另一个指南说::etho:none

编辑

有人似乎同样的问题于 15.04。

编辑2

我现在可以连接到服务器了。结果发现,我复制了错误的私钥来与 dropbear 一起使用。上面的脚本中已经更正了错误。但添加密钥仍然不起作用(即添加到 dropbear 的authorized_keys文件)。有一句话是您需要将要添加的公钥转换为/etc/initramfs-tools/root/.ssh/authorized_keysdropbear 的格式,但我不想花时间搜索如何操作。我只尝试了dss公钥。也许 dropbearrsa更好?

我还注意到,自定义钩子脚本似乎不起作用。它们不包含在 initramfs 目录中,但lsinitramfs -l /boot/initrd.img-3.16.0-43-generic将它们列为映像的一部分。IP 设置也仍然被忽略。即使我将其添加GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"到 grubconfig 中/etc/default/grub并更新所有内容。

编辑3

因此,这似乎/usr/lib/dropbear/dropbearconvert INPUTFORMAT OUTPUTFORMAT INFILE OUTFILE是转换密钥的程序。 FORMAT 参数可以是opensshdropbear。但这似乎不是如何将密钥添加到服务器的答案/etc/initramfs-tools/root/.ssh/authorized_keys。那里的现有密钥已经是 openssh 的公钥文件格式。因此,添加其他 openssh 格式的密钥应该不是问题。但事实并非如此。

答案1

不清楚哪些 known_hosts 会困扰你 - 在服务器上还是在客户端。我使用了以下说明http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/ 在 Debian 上。我将解释该页面并添加一些我认为有用的调整。当代 Debian dropbox 软件包在安装时在服务器上创建所有需要的密钥,但引用的教程太旧了,以至于它提到了需要手动创建密钥的情况。YMMV。

A. 在服务器上。正如您正确提到的,dropbear 和 OpenSSH 密钥不同,但据说可以相互转换。教程说您可以在服务器上使用以下命令创建主机密钥:

dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key

事实上,这比这要难一些。对于我来说,在 Debian Jessie 上,步骤如下:

  1. 创建一个 OpenSSH 密钥。

    ssh-keygen -t rsa -b 4096 -m PEM -f bootkey_rsa

  2. 将其复制到服务器上,也就是您最有可能安装 dropbearconvert 的计算机。在那里,将其转换为 dropbear 格式:

    /usr/lib/dropbear/dropbearconvert openssh dropbear bootkey_rsa bootkey_dropbear_rsa

  3. 仍然在服务器上,登录到 root 身份,并从 Dropbear 密钥中提取公共部分到启动 dropbear 查找它的文件中:

    dropbearkey -y -f bootkey_dropbear_rsa | grep "^ssh-rsa" > /etc/dropbear-initramfs/authorized_keys

  4. 更新 initramfs:

    更新-initramfs -u -k 全部

  5. 清理:从服务器中删除 bootkey_dropbear_rsa 和 bootkey_rsa。

请注意,update-initramfs 所需的 known_hosts 位置(如上所示)/etc/dropbear-initramfs/authorized_keys 是灵活的,并且可能因发行版而异。为确保将其放在正确的位置,请阅读 中的源文件/usr/share/initramfs-tools/hooks/dropbear

另一个所需的密钥是通过以下方式创建的:

dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear

B. 在客户端上,您需要两种密钥,因此还有另一个known_hosts。在参考的教程中,连接的命令是:

ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" [email protected] \
"echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"

其中一个键id_rsa.initramfs是文件/etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_keybootkey_rsa来自服务器部分。

在客户端上known_hosts,您已拥有的 OpenSSH 服务器密钥和您刚刚安装的 dropbear 服务器密钥之间可能存在冲突。我暂时从known_hosts常规 OpenSSH 服务的密钥中删除了密钥,使用上面的命令(省略参数-o)进行连接,系统提示我是否信任主机密钥,我回答是,然后将其附加到我的known hosts。从那里开始,您需要将最后一行移动到其自己的 known_hosts(~/.ssh/known_hosts.initramfs在上面的示例中)。

答案2

以下是如何转换 dropbear 的密钥。启动脚本对我来说也有点奇怪...

答案3

通过您的客户端连接并解锁加密分区来启动您的服务器

安装必需软件包(在服务器上)

apt-get install dropbear initramfs-tools busybox

将所需的公钥附加到服务器的 authorized_keys 文件中

只需将您的公钥复制并粘贴到/etc/dropbear-initramfs/authorized_keys服务器上

创建解锁脚本

在中创建以下脚本/etc/initramfs-tools/hooks/crypt_unlock.sh

#!/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
kill \`ps | grep cryptroot | grep -v "grep" | awk '{print \$1}'\`
# following line kill the remote shell right after the passphrase has
# been entered.
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
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"

  echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd

fi

使其可执行:

chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh

创建静态 IP(或跳过此步骤以使用 DHCP)

编辑/etc/initramfs-tools/initramfs.conf以添加(或更改)以下行:

IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off

format [host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]

([hostname] can be omitted)

更新 initialramfs

update-initramfs -u

在启动时禁用 dropbear 服务,以便在分区解密后使用 openssh

sudo update-rc.d dropbear disable

测试

  1. 重新启动服务器
  2. 通过连接到您的服务器ssh [email protected] [-i ~/.ssh/id_rsa]

答案4

好了,各位,以防万一您没有找到解决方案,并且对于其他按照在线教程进行操作的人来说......

我在网上找到的所有教程都说/暗示该文件

authorized_keys

进入

/etc/initramfs-tools/root/.ssh/

但实际上它应该进入

/etc/dropbear-initramfs/

+1@ceremcem 也展示了这一点。

相关内容