ssh-keygen es un componente estándar de los paquetes de protocolos Secure Shell (SSH) que se encuentran en los sistemas informáticos Unix y Microsoft Windows. Estos protocolos se utilizan para establecer sesiones de shell seguras entre computadoras remotas a través de redes inseguras, mediante el uso de diversas técnicas criptográficas. En particular, la utilidad de ssh-keygen se utiliza para generar, administrar y convertir claves de autenticación para el acceso mediante el uso de estos protocolos.
Instalar característica Cliente OpenSSH en Windows
En caso de utilizar un equipo Windows es necesario tener la característica y puedes ejecutar lo siguiente en un PowerShell con privilegios de administrador para instalarla:
# Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
También puedes realizarlo desde el propio "Agregar características opcionales".
Creación de llaves:
Para crear/generar las llaves para el acceso SSH debes ejecutar:
# ssh-keygen
Por defecto, utiliza RSA 3072 bits. Para generar las llaves con mayor encriptación (ejemplo RSA 4096 bits) puedes ejecutar:
# ssh-keygen -t rsa -b 4096
Una vez ejecutado el comando, la utilidad primero solicitará un directorio donde almacenar las llaves. Puedes dejarlo vacío pulsando directamente Enter para utilizar la ruta por defecto:
Generating public/private rsa key pair.
Enter file in which to save the key (/user/.ssh/id_rsa):
Posteriormente, indicará la posibilidad de añadir un frase de contraseña para el uso de la llave (optativo):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Puedes dejarlo vacío si quieres prescindir de la introducción de ella al utilizar la llave para la conexión. Una vez realizada estas acciones, se habrán creado las llaves y debe aparecer una salida similar a la siguiente:
Your identification has been saved in /user/.ssh/id_rsa
Your public key has been saved in /user/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:7dRQDxLJcKXoZAVByMHQ0aR5AG2O8qgu7BT83kRgvVc user@equipo
The key's randomart image is:
+---[RSA 3072]----+
| oB+B*==++ |
| . B+.+o+ o |
| o =o =Eo . |
|. o o o=.. o |
| o + o .S o . |
| + o . o |
|.o . . . |
|+.. o |
|+o . . |
+----[SHA256]-----+
Transferencia de llaves:
Para poder utilizarlas con el servidor remoto deberás copiar la llave en el servidor destino. Hay varios métodos para transferirlo, pero puedes ejecutar el siguiente comando para realizarlo de forma más rápida (modifica el usuario y la dirección IP por la del servidor remoto):
# ssh-copy-id usuario@direcciónIP
Un sistema Windows no incluye esta función, pero es fácil de replicar. Puedes ejecutar lo siguiente (modifica el usuario y la dirección IP por la del servidor remoto):
# ssh usuario@direcciónIP "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1" < .ssh\id_rsa.pub
Ahora podrás probar el acceso directamente utilizando la llave generada sin la utilización de contraseña del servidor. Únicamente como hemos explicado anteriormente, si has configurado una frase de contraseña al generar la llave te pedirá la introducción de ella para acceder al servidor.
Deshabilitar autenticación por contraseña (opcional)
Aviso
En caso de eliminación o perdida de las llaves con esta opción de autentificación por contraseña deshabilitada, por ende, también perderás el acceso por el protocolo SSH. Para poder reconfigurar otras llaves o simplemente acceder servidor tendrás que realizarlo por Consola de emergencia.
Adicionalmente, puedes deshabilitar la opción de autentificación por contraseña una vez tengas acceso mediante la llave SSH. De esa forma, podrás evitar ataques de fuerza bruta al servidor prescindiendo de este método.
Para ello edita el fichero de configuración del servicio y modifica el parámetro PasswordAuthentication descomentándolo y añadiendo "no" para desactivarlo. Puedes ejecutar directamente este comando sed para reemplazar la configuración por defecto por la anterior mencionada:
# sed -i "/#PasswordAuthentication yes/c\PasswordAuthentication no" /etc/ssh/sshd_config
Por último, recarga la configuración del servicio SSH para hacer efectivo el cambio realizado:
# systemctl reload sshd.service
Esperamos que este tutorial te haya sido de ayuda, si tienes consultas sobre esta u otra cuestión relacionada con tus servidores en Clouding, no dudes en contactar a soporte@clouding.io ¡Estamos para ayudarte!