Введение
Сценарий installimage Hetzner Rescue System предлагает простой способ установки различных дистрибутивов Linux.
В этом руководстве показано, как использовать installimage для установки зашифрованной системы Ubuntu 22.04 и добавления удаленной разблокировки через SSH (dropbear) в initramfs, расположенном на отдельном разделе. /ботинок шоу.
Предпосылки
- Счет Хетцнера
- Сервер был загружен в аварийный режим.
- Открытый ключ SSH RSA, ECDSA или ED25519
- В облаке Hetzner отсутствуют частные сети.
Шаг 1 – Создайте или скопируйте открытый ключ SSH.
Для удалённой разблокировки зашифрованной системы вам потребуется SSH-ключ. Этот ключ вы будете использовать позже для входа в загруженную систему. Демон dropbear SSH, входящий в состав Ubuntu 22.04, поддерживает только ключи 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 без каких-либо параметров программа запускается в интерактивном режиме и после выбора образа дистрибутива открывает редактор. После выхода из редактора установка продолжается, и соответствующая конфигурация сохраняется в установленной системе как /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 – Создайте или скопируйте скрипт после установки.
Для удалённой разблокировки зашифрованного раздела необходимо установить SSH-сервер Dropbear и добавить его в initramfs, хранящийся на незашифрованном разделе /boot. Это также приведёт к включению 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
Шаг 4 – Начните установку
Перед началом установки дважды проверьте содержимое следующих файлов:
- /tmp/authorized_keys – Ваш открытый SSH-ключ (RSA, ECDSA или ED25519)
- /tmp/setup.conf – конфигурация installimage
- /tmp/post-install.sh – исполняемый файл, содержащий скрипт, выполняемый после установки.
Теперь вы готовы начать установку, выполнив следующую команду:
installimage -a -c /tmp/setup.conf -x /tmp/post-install.sh
Дождитесь завершения установки и проверьте файл debug.txt на наличие ошибок.
Шаг 5 – Загрузка установленной системы
После завершения установки и устранения всех ошибок вы можете выполнить перезагрузку, чтобы перезапустить сервер и загрузить только что установленную систему. Если у вас подключен KVM-переключатель или удаленная консоль в облачном экземпляре, вы можете наблюдать за процессом загрузки.
Через некоторое время сервер должен ответить на пинг. Теперь войдите в Dropbear через SSH и запустите 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. Оно может не работать на других дистрибутивах.









