Con un simple comando: ssh-keygen -b 4096 -N "<frase para la key>" -f test.key && ssh-copy-id -i test.key.pub <user>@<HostnameRemoto-o-IP>
Este artículo muestra los pasos para generar pares de claves SSH y realizar una autenticación basada en claves.
Si tienes máquinas virtuales en tu homelab y quieres administrarlas mediante un par de claves, o usar Ansible para administrar muchos nodos con pares de claves en lugar de contraseñas, entre muchos otros casos de uso.
Realicé la demostración con dos máquinas virtuales Linux, una Ubuntu y una Debian, pero esto se aplica a todos los sistemas basados en Unix. Esto también se puede hacer desde PowerShell en una versión de Windows 10 o más reciente usando el cliente OpenSSH integrado
Pasos:
1- Crea la clave con ssh-keygen -b 4096
, esto utiliza una clave de 4096 bits en lugar de los 3072 que se crea por defecto
2- Agrega una frase de contraseña, puedes agregar esta frase de contraseña a un agente SSH en caso de que no quieras escribirla cada vez que uses el par de claves, también puedes dejarla en blanco pero eso hace que la autenticación sea menos segura.
3- Copia la clave pública al host remoto ssh-copy-id <user>@<HostnameRemoto-o-IP>
este comando enviará la clave pública al archivo ~/.ssh/authorized_keys del servidor especificado, incluso logra crear el archivo y directorio en caso de que no estuviera allí.
En caso de querer deshabilitar la autenticación por contraseña en el servidor remoto:
1- Ingresa al host remoto y cambia PasswordAuthentication a no, esto se puede hacer en el archivo /etc/ssh/sshd_config
pero es una buena práctica hacerlo en un archivo .conf en el directorio /etc/ssh/sshd_config.d/
, en la segunda imagen a continuación lo hice con el comando sudo sed -i s/yes/no/ /etc/ssh/sshd_config.d/50-cloud-init.conf
2- Reinicie el servicio sshd para aplicar los cambios systemctl restart sshd
Notas adicionales:
- Se puede crear un archivo
~.ssh\config
para administrar diferentes conexiones - Existen muchas otras características que hacen que la conexión sea más segura, algunos ejemplos: permitir que solo ciertas direcciones IP lleguen al servidor mediante una whitelist de SSH o iptables, agregar algunas restricciones en el archivo authorized_keys, entre otras prácticas recomendadas.
- Si se utilizan máquinas virtuales en la nube, es más seguro utilizar el agente SSM en AWS o Azure Bastion, ya que no se expone ningún puerto para SSH.