Unter RHEL 8 und früheren Versionen ist es üblich, dass die SSH-Hostschlüssel /etc/ssh
automatisch vom sshd
Dienst generiert werden, wenn sie fehlen. Normalerweise sollte Folgendes vorhanden sein:
/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
Ein Neustart des Knotens oder sogar ein Neustart systemctl restart sshd
sollte ausreichen.
Aber ab der Nebenversion RHEL 8.7 funktioniert das möglicherweise nicht mehr und die sshd
Abstürze melden fehlende Hostschlüssel im Journalprotokoll. Warum? Wie kann ich das lösen?
Antwort1
Der sshd
Dienst ruft standardmäßig auf sshd-keygen.target
, der die Verfügbarkeit von Hostschlüsseln im /etc/ssh
Verzeichnis überprüft und diese generiert, wenn sie fehlen.
Diese bekannte Funktionalität kann jedoch durch die neue Version von blockiert werden cloud-init
. Ab cloud-init-22.1-5.el8.noarch
gibt es eine neue Datei:
/etc/systemd/system/[email protected]/disable-sshd-keygen-if-cloud-init-active.conf
mit Inhalt:
# 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
Wenn Sie das verwenden, cloud-init
haben Sie jetzt zwei Optionen:
- Hostschlüssel manuell generieren mit
ssh-keygen -A
(sieheWie ändere ich einen SSH-Hostschlüssel?für weitere Details und Optionen. - Kommentieren Sie die Bedingung
Setzen Sie einfach das #
Zeichen vorConditionPathExists...
[Unit]
#ConditionPathExists=!/run/systemd/generator.early/multi-user.target.wants/cloud-init.target
Laden Sie anschließend die systemd-Konfiguration mit neu systemctl daemon-reload
. Das gewohnte Verhalten sollte nun wieder funktionieren.
Antwort2
Wenn Sie Cloud-Init verwenden, können Sie das Problem beheben, indem Sie das Modul „ssh“ in der Cloud-Init-Konfigurationsdatei im Abschnitt „cloud_init_modules“ hinzufügen. SieheCloud-Init-Dokumente
Dadurch wird beim ersten Start ein SSH-Hostschlüssel generiert.
Sie können dies testen, wenn bei Ihnen ein Problem auftritt:
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
Überprüfen Sie den SSH-Hostschlüssel im Verzeichnis /etc/ssh/ und den SSHD-Dienststatus.
Antwort3
Versuchen Sie, SSH-Schlüsseltypen explizit in cloud.cfg festzulegen
resize_rootfs_tmp: /dev
ssh_deletekeys: 1
ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519']