В продолжение поста 1.
Раз имеем физический сервер на котором крутиться VM с зашифрованным диском, то негоже самому серверу загрузочный диск иметь "голый". Параннойя сказала: "Оно Нам Надо!", лень ответила: "Но на физ.сервере практически путо!", параноя повторила: "Оно Нам Надо!" И начался квест с поиском решения, т.к. на физ.сервере нет KVM-консоли. Эта услуга оплачивается отдельно на 3 часа и при срыве разблокировки по TPM, постоянно зависить от времени реакции поддержки, то ещё удовольствие.
В конце концов, за двое суток штурма, решение было найдено и оттестировано на домашнем сервере. Основная разблокировка диска по TPM и аварийный доступ к разблокировке паролем, через ssh на раннем этапе загрузки. Зыучит сложно, но настраивается достаточно просто.
Начать лучше с генерации нового ssh ключа [ssh-keygen] и назавём его: id_dracut_ed25519. А теперь перейдём на физ.сервер с ОС RHEL-base и уже зашифрованным диском. Добовляем немного магии:
dnf -y install epel-release
dnf install -y dracut-sshd
# Настраиваем свой ssh ключь для dracut-sshd
mkdir -p /etc/dracut-sshd /etc/dracut.conf.d
echo "ваш публичный ключь id_dracut_ed25519.pub" > /etc/dracut-sshd/authorized_keys
chmod 700 /etc/dracut-sshd && chmod 600 /etc/dracut-sshd/authorized_keys
# Настройки для поднятия сети на раннем этапе загрузки
echo 'sshd_keep_hostkeys="yes"' > /etc/dracut.conf.d/sshd_hostkeys.conf
echo 'add_dracutmodules+=" network-manager "' > /etc/dracut.conf.d/sshd.conf
echo 'dracut_sshd_unlock_root_account="yes"' >> /etc/dracut.conf.d/sshd.conf
# Добавляем shadow в initramfs иначе Permission denied (publickey) даже с правильным ключём
echo 'install_items+=" /etc/shadow "' >> /etc/dracut.conf.d/sshd.conf
# Исключаем из сборки устаревшие драйверы (у меня в тестах вылезли, возможно это особенности только моих сборок)
echo 'omit_drivers+=" cnic bnx2i "' > /etc/dracut.conf.d/unmaintained.conf
# Пересборка initramfs
dracut -vf
# Добовляем аргументы загрузки ядра
# Вариант если сервер получает IP по dhcp
grubby --update-kernel=ALL --args="rd.neednet=1 ip=any:dhcp"
# Если адрес статический то заменить ip=any:dhcp на:
ip=<ip-адрес>::<шлюз>:<маска_или_префикс>:<хостнейм>:<интерфейс>:none:<dns_1>:<dns_2>
ip=192.168.1.50::192.168.1.1:255.255.255.0:server:enp1s0:none:8.8.8.8:1.1.1.1
# Проверяем, что параметры успешно применились
grubby --info=DEFAULT
Далее перезагружаем сервер и если всё сделано верно, на этапе когда загрузка остоновиться для ввода пароля, можно будет подключаться по ssh.
ssh -i ~/.ssh/id_dracut_ed25519 root@IP-сервера
# После успешного входа запускаем и вводим свой пароль от luks
systemd-tty-ask-password-agent
Всего делов-то, а Паранойя давольна)))
На разных сборках могут вылазить свои прибабахи, например ключи сервера и ключи в ранней загрузке отличаться, хотя и используется настройка sshd_keep_hostkeys="yes". ssh в ранней загрузке отличается параноидальными настройками безопасности, вход только по ключу.
RHEL-base: RHEL 10, AlmaLinux 10, Rocky Linux 10, CentOS Stream 10, Fedora 44





