Autenticarse por SSH sin usar contraseña
Cuando estamos accediendo constantemente por SSH a una o varias máquinas remotas tenemos que estar introduciendo contraseñas no muy amigables de recordar.
Para evitar esta repetitiva tarea podemos crear un sistema de clave pública/privada de formar que solo tengamos que escribir ssh usuario@servidor
para acceder sin introducir nada más.
Lo primero que debemos hacer es comprobar si tenemos alguna clave pública generada anteriormente y, en caso que exista podremos sobre escribirla o usar la que ya tenemos.
Para saber si tenemos alguna clave previamente almacenada podemos listarlas del directorio por omisión:
ls ~/.ssh/id_*.pub
Si nos devuelve un mensaje de que no ha encontrado archivo alguno pues está claro que, al menos, en el directorio por omisión no tenemos almacenada clave alguna.
Si nos devuelve algún o algunos archivos es que ya la habíamos generado.
En cualquier caso podemos volver a generarla y sobre escribirla.
Crear clave pública SSH
Vamos a crear la clave que vamos a usar en los diferentes servidores a los que nos conectemos por SSH.
Escribimos el siguiente comando:
ssh-keygen
Y nos preguntará que escribamos el nombre en el que queremos guardar la clave, aunque podemos dejarla por defecto, pulsando intro, y lo hará en id_rsa
:
Generating public/privateorsa key pair.
Enter file in which to save the key (/home/usuario/.ssh/id_rsa):
Después nos preguntará por la contraseña para la encriptación, pero podemos dejarla tal cual si es nuestra máquina y solo la usamos nosotros, para ello pulsamos intro sin escribir nada.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Por último nos devolverá la huella generada y creará el archivo privado id_rsa
y el público id_rsa.pub
.
Especificación de ssh-keygen
ssh-keygen
tiene muchos parámetros muy interesantes pero hay dos que nos pueden interesar en primera instancia.
Si quieres profundizar:
ssh-keygen --help
Los parámetros que pueden ser más útiles son -t
con el que podemos indicar el tipo de codificación dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
, por defecto, y si no se indica nada, usa rsa
.
A continuación podemos indicar el número bits, por defecto, si no escribimos nada, usa 2048 bits pero podemos poner, por ejemplo, 4096.
Por tanto, el resultado final sería:
ssh-keygen -t rsa 4096
Generando una clave rsa
con una profundidad de 4096 bits.
Como en la que creamos previamente no habíamos especificado nada significa que habíamos creado una clave rsa
con una profundidad de 2048 bits.
Copiar la clave pública al servidor
El siguiente paso es copiar nuestra clave pública en el o los servidores a los que habitualmente nos conectamos.
ssh-copy-id usuario@servidor
Nos devuelve un texto similar al siguiente y nos pide, por última vez, la contraseña que usamos para conectarnos a este servidor en cuestión.
ssh-copy-id usuario@servidor
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
(usuario@servidor) Password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'usuario@servidor'"
and check to make sure that only the key(s) you wanted were added.
A partir de este momento, cada vez que queramos conectarnos a este servidor, solo tendremos que escribir:
ssh usuario@servidor
y accedermos directamente.
Especificar puerto de conexión
Si al copiar la clave al servidor, este no usa el puerto estándar 22, tendremos que especificarle cual es el que tiene que usar por lo habría que añadirlo especificándolo, al igual que cuando nos conectamos a él.
ssh-copy-id usuario@servidor -p2222
y para conectarnos, lo especificamos de igual forma.
ssh usuario@servidor -p2222
Configuración de sshd en el servidor
Hay que comprobar la configuración de sshd:
En el servidor, asegúrate de que estas líneas no estén comentadas en /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys