Почему система RHEL8 не генерирует ключи хоста SSH автоматически при их отсутствии?

Почему система RHEL8 не генерирует ключи хоста SSH автоматически при их отсутствии?

На RHEL 8 и более ранних версиях обычно ключи хоста SSH /etc/sshавтоматически генерируются sshdслужбой при их отсутствии. Обычно должно быть:

/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub

Перезапуска узла или его полной перезагрузки systemctl restart sshdдолжно быть достаточно.

Но начиная с младшей версии RHEL 8.7 это может больше не работать и sshdкрах с жалобами на отсутствие ключей хоста в журнале. Почему? Как это решить?

решение1

sshdПо умолчанию служба вызывает , sshd-keygen.targetкоторая проверяет наличие ключей хоста в /etc/sshкаталоге и генерирует их в случае отсутствия.

Однако эта известная функциональность может быть заблокирована новой версией cloud-init. На данный момент cloud-init-22.1-5.el8.noarchесть новый файл:

/etc/systemd/system/[email protected]/disable-sshd-keygen-if-cloud-init-active.conf

с содержанием:

# In some cloud-init enabled images the sshd-keygen template service may race
# with cloud-init during boot causing issues with host key generation.  This
# drop-in config adds a condition to [email protected] if it exists and
# prevents the sshd-keygen units from running *if* cloud-init is going to run.
#
[Unit]
ConditionPathExists=!/run/systemd/generator.early/multi-user.target.wants/cloud-init.target

Итак, при использовании cloud-initу вас теперь есть 2 варианта:

  1. Сгенерируйте ключи хоста вручную с помощью ssh-keygen -A(см.Как изменить ключ хоста SSH?для получения более подробной информации и опций.
  2. Прокомментируйте состояние

Просто поставьте знак #передConditionPathExists...

[Unit]
#ConditionPathExists=!/run/systemd/generator.early/multi-user.target.wants/cloud-init.target

Затем перезагрузите конфигурацию systemd с помощью systemctl daemon-reload. Обычное поведение должно снова работать.

решение2

Если вы используете cloud-init, то вы можете исправить это, добавив модуль 'ssh' в файл конфигурации cloud-init в раздел "cloud_init_modules". См.документы cloud-init

Это сгенерирует ключ хоста SSH во время первой загрузки.

Вы можете проверить это в случае возникновения проблем:

cloud-init config file: /etc/cloud/cloud.cfg
Check if you have 'ssh' module in "cloud_init_modules" section
Run this command to verify cloud-init action. NOTE: This will REBOOT your instance and run the cloud-init action from the scratch.
# cloud-init clean --reboot

Проверьте ключ хоста ssh в каталоге /etc/ssh/ и состояние службы sshd.

решение3

Попробуйте явно задать типы ключей SSH в cloud.cfg

resize_rootfs_tmp: /dev
ssh_deletekeys:   1
ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519']

Связанный контент