En RHEL 8 y versiones anteriores, es habitual que el servicio /etc/ssh
genere automáticamente las claves de host SSH sshd
cuando faltan. Normalmente debería haber:
/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
Reiniciar el nodo o incluso systemctl restart sshd
debería ser suficiente.
Pero a partir de la versión menor de RHEL 8.7, es posible que esto ya no funcione y los sshd
bloqueos se quejan de que faltan claves de host en el registro de diario. ¿Por qué? ¿Como puedo resolver esto?
Respuesta1
El sshd
servicio llama de forma predeterminada sshd-keygen.target
, que verifica la disponibilidad de las claves de host en /etc/ssh
el directorio y las genera cuando faltan.
Sin embargo, esta conocida funcionalidad puede ser bloqueada por la nueva versión de cloud-init
. A partir de cloud-init-22.1-5.el8.noarch
ahí hay un nuevo archivo:
/etc/systemd/system/[email protected]/disable-sshd-keygen-if-cloud-init-active.conf
con contenido:
# 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
Entonces, cuando usas el, cloud-init
ahora tienes 2 opciones:
- Genere claves de host manualmente con
ssh-keygen -A
(consulte¿Cómo cambiar una clave de host SSH?para más detalles y opciones. - Comenta la condición
Simplemente ponga el #
cartel delanteConditionPathExists...
[Unit]
#ConditionPathExists=!/run/systemd/generator.early/multi-user.target.wants/cloud-init.target
Luego recarga la configuración de systemd con systemctl daemon-reload
. El comportamiento habitual debería funcionar nuevamente.
Respuesta2
Si está utilizando cloud-init, puede solucionarlo agregando el módulo 'ssh' en el archivo de configuración de cloud-init en la sección "cloud_init_modules". Referirsedocumentos de inicio de nube
Esto generará la clave de host ssh durante el primer arranque.
Puede probar esto en caso de que tenga un problema:
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
Verifique la clave del host ssh en el directorio /etc/ssh/ y el estado del servicio sshd.
Respuesta3
Intente configurar explícitamente los tipos de claves ssh en cloud.cfg
resize_rootfs_tmp: /dev
ssh_deletekeys: 1
ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519']