Conexión SSH sin password

Open SSH Logo¿Os habeis encontrado alguna vez programando un script que se ejecutará desde el cron y que tiene que hacer un scp a otra máquina? Yo si, y me surgía el problema de que cron no escribe el password, por lo tanto ahí acababa el correcto funcionamiento del script.

Para casos de este estilo, una posible solución es hacer que el servidor ssh tenga añadido nuestra máquina como host de confianza mediante el algoritmo de clave pública y clave privada DSA (Digital Signature Algorithm).

Los pasos para poder autenticar en una máquina de manera segura y sin escribir el password son:

1) Generamos la clave pública y privada en nuestra máquina “local” (por llamarla de alguna manera) de la siguiente manera:

user@machine:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
ad:a3:f3:ad:a3:f3:ad:a3:f3:ad:a3:f3:ad:a3:f3:ad:

En este caso, como lo que queremos es evitar teclear cualquier tipo de password o passphrase a la hora de hacer la conexión, no insertaremos ningún valor cuando nos pida passphrase; si bien, tenemos que ser conscientes de que el nivel de seguridad es algo menor.

2) Una vez generadas las claves, miramos el contenido del fichero /home/user/.ssh/id_dsa.pub y seleccionamos el churro de información que contiene. Algo similar a esto:

ssh-dss AAAAB3NzaC1kc3MAA [...] cQde50+HLUINDX2qbexsAcDsyhnFMEvju user@machine

3) Vamos a la máquina “remota” y pegamos toda esta información dentro del archivo authorized_keys de la carpeta /home/user/.ssh/. Si por un casual no existe la carpeta o el archivo, lo creamos nosotros manualmente.

Ya hemos configurado la máquina remota para que acepte nuestras conexiones automáticas. Si probamos hacer ssh a la máquina remota, deberíamos entrar sin necesidad de teclear nuestra contraseña.