El objetivo es establecer una conexión SSH sin necesidad de teclear una password, evidentemente no a costa de la seguridad, claro está.
Esto puede resultar de utilidad para lo siguiente:
- Administramos varias máquinas y estamos hartos de teclear.
- Necesitamos lanzar comandos remotos de manera automática (CRON, script, …).
Esto lo podemos conseguir generando una clave RSA en la máquina cliente, y dejando la parte pública de dicha clave en el servidor, de modo que cuando el cliente intente conectarse al servidor, este se fíe del cliente.
Supongamos que tenemos la siguiente topología de máquinas y usuarios:
Pasos a seguir
Generar la clave
Generar la clave RSA en el cliente, desde la cuenta del usuario1:
ssh-keygen -t rsa
Esto generará lo siguiente (Pulsa la tecla Enter donde aparezca el texto [ENTER]
):
Generating public/private rsa key pair.
Enter file in which to save the key (/home/usuario1/.ssh/id_rsa): [ENTER]
Enter passphrase (empty for no passphrase): [ENTER]
Enter same passphrase again: [ENTER]
Your identification has been saved in /home/usuario1/.ssh/id_rsa.
Your public key has been saved in /home/usuario1/.ssh/id_rsa.pub.
The key fingerprint is:
67:da:cf:b6:31:8f:3a:a8:aa:fb:96:d6:03:96:fd:82 usuario1@cliente
Tal y como el log del comando indica esto nos ha generado 2 ficheros: ~/.ssh/id_rsa
clave privada, ~/.ssh/id_rsa.pub
clave pública.
Desplegar clave pública
Copiaremos la clave pública al servidor:
ssh-copy-id usuario2@servidor
Esto mostrará lo siguiente (introducir la password de usuario2
en [PASSWORD]
):
usuario2@servidor's password: [PASSWORD]
id_rsa.pub 100% 402 0.4KB/s 00:00
Con estos pasos, ya podremos hacer un SSH desde el cliente al servidor sin que se nos pregunte por una password.
Resolución de problemas
Ver log
Lo mejor para solucionar problemas es usar el log, para ello tenemos dos vías:
En el cliente, lanzar el cliente de SSH con toda la traza posible:
ssh -v -v -v -v cliente2@servidor
En el servidor, ver la traza del servidor de SSH:
tail /var/log/auth.log
Problemas típicos
Algunos de los problemas que pueden darse son:
No has generado bien la clave en el cliente.
Los permisos de la carpeta ~/.ssh
o del fichero ~/.ssh/authorized_keys
en el servidor no son correctos (la carpeta debería ser de lectura/escritura sólo para el usuario).
La versión de SSH del cliente no corresponde con la del servidor, lo cual puede causar un fallo, para detectarlo y solucionarlo ver las trazas como se ha indicado previamente, y lo normal sería actualizar ambas máquinas.
El cliente es más viejo que el servidor, y ha generado una clave que el servidor considera vulnerable. Este error es muy difícil de de detectar, dado que hay que ver en profundidad las trazas del servidor, pero se puede prevenir fácilmente ejecutando el comando en el servidor que nos dirá si tenemos alguna clave en la máquina vulnerable:
ssh-vulnkey -a
Si la clave del cliente fuera marcada como vulnerable, tenemos dos opciones:
- Actualizar el cliente y repetir el proceso sobre escribiendo las claves.
- Indicar en el servidor que acepte las claves vulnerables, esto lo hacemos editando el fichero de configuración del servidor de SSH del servidor añadiendo la línea (si es que no existe previamente):
PermitBlacklistedKeys yes
Si tenéis algún problema adicional, no dudéis en enviar un comentario, e intentaré ayudaros. También si alguien ha tenido algún problema con esto, y ha encontrado solución, se agradecería un comentario indicando cuál fue el problema y su solución, de este modo ayudaremos a gente que pudiera tener dicho problema…