Acceder por SSH sin utilizar la contraseña

Estos días me he visto en la necesidad de copiar archivos entre diferentes máquinas y he tenido que crear scripts para automatizar las tareas. Me he topado con un problema con el que no me había encontrado antes, y es que el comando scp pide al usuario que teclee la contraseña. ¿Cómo voy a programar una copia si no estoy delante del ordenador para introducir la contraseña?

En esta entrada voy a explicar cómo acceder a un servidor por SSH sin utilizar la contraseña. En su lugar, utilizaremos un par de claves pública y privada con el que nos identificaremos ante el servidor al que queremos conectarnos.

En primer lugar, generamos nuestras claves:

ssh-keygen -t rsa

Dejamos la contraseña en blanco. El programa generará una clave privada (que guardaremos en nuestra máquina) y una pública que daremos a diestro y siniestro. Estas claves se crean por defecto en la carpeta ~/.ssh.

Ahora hay que añadir nuestra clave pública al archivo authorized_keys del servidor remoto, que se encuentra también en la carpeta ~/.ssh del usuario que vamos a utilizar.

# Creamos la carpeta si no existe 
ssh usuario@10.0.1.23 mkdir -p .ssh
usuario@10.0.1.23's password:

# Vamos a nuestra home
cd

# Añadimos nuestra clave pública
cat $HOME/.ssh/id_rsa.pub | ssh usuario@10.0.1.23 "cat >> .ssh/authorized_keys" 
usuario@10.0.1.23's password:

Listo, si ahora accedemos de nuevo ya no nos volverá a pedir la contraseña.