¿Por qué el sistema RHEL8 no genera claves de host SSH automáticamente cuando faltan?

¿Por qué el sistema RHEL8 no genera claves de host SSH automáticamente cuando faltan?

En RHEL 8 y versiones anteriores, es habitual que el servicio /etc/sshgenere automáticamente las claves de host SSH sshdcuando 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 sshddebería ser suficiente.

Pero a partir de la versión menor de RHEL 8.7, es posible que esto ya no funcione y los sshdbloqueos se quejan de que faltan claves de host en el registro de diario. ¿Por qué? ¿Como puedo resolver esto?

Respuesta1

El sshdservicio llama de forma predeterminada sshd-keygen.target, que verifica la disponibilidad de las claves de host en /etc/sshel 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.noarchahí 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-initahora tienes 2 opciones:

  1. Genere claves de host manualmente con ssh-keygen -A(consulte¿Cómo cambiar una clave de host SSH?para más detalles y opciones.
  2. 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']

información relacionada