介绍
脚本 安装镜像 Hetzner Rescue System 提供了一种简便的方法来安装各种 Linux 发行版。.
本教程展示了如何使用 installimage 安装加密的 Ubuntu 22.04 系统,并在存储在单独分区上的 initramfs 中添加通过 SSH (dropbear) 进行远程解锁的功能。 /boot 演出。.
先决条件
- 赫茨纳账户
- 服务器已启动到救援系统。
- RSA、ECDSA 或 ED25519 SSH 公钥
- Hetzner Cloud 中未连接任何私有网络。
步骤 1 – 创建或复制 SSH 公钥
要远程解锁加密系统,您需要一个 SSH 密钥。稍后您将使用此密钥登录已启动的系统。Ubuntu 22.04 中包含的 dropbear SSH 服务仅支持 RSA 和 ECDSA 密钥。如果您没有此类密钥,则需要创建一个。我们建议使用 ED25519 或 ECDSA 密钥。.
例如,要创建 SSH 密钥 ED25519,请运行:
ssh-keygen -t ed25519
将公钥复制到救援系统,例如使用 scp 命令:
scp ~/.ssh/id_ed25519.pub root@<your-host>:/tmp/authorized_keys
步骤 2 – 创建或复制安装镜像配置文件
当不带任何选项调用 installimage 时,它会以交互模式启动,并在选择发行版镜像后打开一个编辑器。退出编辑器后,安装过程继续,并将相应的配置保存为已安装系统上的 /installimage.conf 文件。在本教程中,我们将使用这样的配置文件进行直接安装。.
创建 /tmp/setup.conf 文件并添加以下内容,或者将其复制到救援系统上的服务器。.
注意:请将 Secret 替换为安全密码,并根据需要调整驱动器名称和分区。.
CRYPTPASSWORD secret
DRIVE1 /dev/sda
BOOTLOADER grub
HOSTNAME host.example.com
PART /boot/efi esp 256M
PART /boot ext4 1G
PART / ext4 all crypt
IMAGE /root/images/Ubuntu-2204-jammy-amd64-base.tar.gz
SSHKEYS_URL /tmp/authorized_keys此配置将 Ubuntu 安装到驱动器 (/dev/sda) 上,并带有一个单独的未加密的 /boot,这是远程解锁所必需的。.
步骤 3 – 创建或复制安装后脚本
要远程解锁加密分区,我们需要安装 Dropbear SSH 服务器,并将其添加到存储在未加密的 /boot 分区上的 initramfs 中。这也会将 dhclient 添加到网络配置中,但不会增加任何其他功能。要启用 Hetzner Cloud 支持,我们需要添加一个包含对 RFC3442 路由支持的钩子。.
要执行这些额外的步骤,我们需要一个 installimage 的安装后脚本。
在救援系统上创建文件 /tmp/post-install.sh,内容如下:
#!/bin/bash
add_rfc3442_hook() {
cat << EOF > /etc/initramfs-tools/hooks/add-rfc3442-dhclient-hook
#!/bin/sh
PREREQ=""
prereqs()
{
echo "\$PREREQ"
}
case \$1 in
prereqs)
prereqs
exit 0
;;
esac
if [ ! -x /sbin/dhclient ]; then
exit 0
fi
. /usr/share/initramfs-tools/scripts/functions
. /usr/share/initramfs-tools/hook-functions
mkdir -p \$DESTDIR/etc/dhcp/dhclient-exit-hooks.d/
cp -a /etc/dhcp/dhclient-exit-hooks.d/rfc3442-classless-routes \$DESTDIR/etc/dhcp/dhclient-exit-hooks.d/
EOF
chmod +x /etc/initramfs-tools/hooks/add-rfc3442-dhclient-hook
}
remove_unwanted_netplan_config() {
cat << EOF > /etc/initramfs-tools/scripts/init-bottom/remove_unwanted_netplan_config
#!/bin/sh
if [ -d "/run/netplan" ]; then
interface=\$(ls /run/netplan/ | cut -d'.' -f1)
if [ \${interface:+x} ]; then
rm -f /run/netplan/"\${interface}".yaml
fi
fi
EOF
chmod +x /etc/initramfs-tools/scripts/init-bottom/remove_unwanted_netplan_config
}
# Install rfc3442 hook
add_rfc3442_hook
# Adding an initramfs-tools script to remove /run/netplan/{interface}.yaml,
# because it is creating unwanted routes
remove_unwanted_netplan_config
# Update system
apt-get update >/dev/null
apt-get -y install cryptsetup-initramfs dropbear-initramfs
# Copy SSH keys for dropbear and change the port
cp /root/.ssh/authorized_keys /etc/dropbear/initramfs/
sed -ie 's/#DROPBEAR_OPTIONS=/DROPBEAR_OPTIONS="-I 600 -j -k -p 2222 -s"/' /etc/dropbear/initramfs/dropbear.conf
dpkg-reconfigure dropbear-initramfs
update-initramfs -u重要提示:安装完成后,请确保脚本可执行:
chmod +x /tmp/post-install.sh
第四步 – 开始安装
安装前,请仔细检查以下文件的内容:
- /tmp/authorized_keys – 您的公钥(RSA、ECDSA 或 ED25519)
- /tmp/setup.conf – 安装镜像配置
- /tmp/post-install.sh – 是可执行文件,包含安装后脚本。.
您现在可以开始使用以下命令进行安装:
installimage -a -c /tmp/setup.conf -x /tmp/post-install.sh
等待安装完成,并检查 debug.txt 文件是否有任何错误。.
步骤 5 – 启动已安装的系统
安装完成后,所有错误都已解决,您可以执行重启操作以重新启动服务器并启动新安装的系统。如果您连接了 KVM 虚拟机或通过云实例上的远程控制台,则可以观察启动过程。.
过一会儿服务器应该会响应 ping 请求。现在通过 SSH 登录到 dropbear,并运行 cryptroot-unlock 命令来解锁加密分区。.
- 密钥为 ED25519 或 ECDSA
ssh -p 2222 root@<your-host>
- 使用 RSA 密钥
对于 RSA 密钥,我们必须明确指定接受此密钥。.
ssh -o "PubkeyAcceptedKeyTypes +ssh-rsa" -p 2222 root@<your-host> -i ~/.ssh/id_rsa
例子:
$ ssh -o "PubkeyAcceptedKeyTypes +ssh-rsa" -p 2222 root@<your-host> -i ~/.ssh/id_rsa
BusyBox v1.30.1 (Ubuntu 1:1.30.1-7ubuntu3) built-in shell (ash)
Enter 'help' for a list of built-in commands.
# cryptroot-unlock
Please unlock disk luks-80e097ad-c0ab-47ce-9302-02dd316dc45c:如果密码正确,启动过程将继续,您将自动与临时 SSH 会话断开连接。.
几秒钟后,您就可以登录到您的新系统。.
注意力
本指南专为 Ubuntu 22.04 编写,可能不适用于其他发行版。.









