Llega un momento en que introducir cada vez que queremos ingresar en nuestro servidor nuestra contraseña empieza a cansar. Esta contraseña además suele ser no muy sólida ya que es de las que debemos recordar. Y en todo caso entrar con contraseña no deja de ser más inseguro que usando claves públicas.
El servicio Ssh permite poder acceder mediante clave pública, de modo que no necesitemos escribir nuestra contraseña para ingresar en el servidor.
La idea detrás es bastante sencilla. En nuestro equipo local desde el que queremos acceder, generamos una llave pública RSA. Después la compartimos con el usuario remoto, para que la guarde añadiéndola a un archivo llamado authorized_keys. En este archivo el usuario remoto guarda todas las claves públicas con las que identifica a los usuarios remotos que quieran ingresar en su cuenta de usuario.
Veamos como hacerlo usando una terminal. En nuestro equipo local, en una terminal, ejecutamos el comando:
ssh-keygen
Este comando va a generar las llaves pública y privada. Aunque ahora solo nos interesa la pública, que estará en un archivo llamado id_rsa.pub. La aplicación nos va a pedir una passphrase, que no necesitamos, y bastará con dar retorno para no poner ninguna.
Una vez creada la llave pública debemos añadirla al almacén del usuario remoto en el cual queremos autentificarnos. Este almacén esta en un directorio oculto en su $HOME, llamado .ssh. Y dentro de él el archivo authoriezed_keys donde se añaden las llaves.
Primero vamos a subir la llave RSA pública al usuario remoto. El comando siguiente bastaría, adaptándolo a nuestro usuario y servidor:
scp ~/.ssh/id_rsa.pub usuario@servidor.com:~/id_rsa.pub
Después accedemos al usuario remoto haciendo la autentificación de la forma normal, es decir usando contraseña. El siguiente comando adaptándolo a nuestro usuario y servidor remoto nos vale:
ssh usuario@servidor.com
Creamos el directorio, que probablemente no exista con:
mkdir ~/.ssh
Y añadimos o creamos el almacén con la llave RSA pública que subimos antes y que esta en el $HOME del usuario, con:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
Ahora, una vez añadida nuestra llave pública al almacén authorized_keys, podemos salir, y volver a intentar conectar. Si todo funciona correctamente la autentificación se producirá sin solicitarnos la contraseña para ingresar.
Para cada usuario local desde donde queremos conectarnos hay que repetir los pasos. Igualmente para cada usuario remoto al que queremos acceder. Una vez accedemos al usuario remoto con llave pública es buen momento para ponerle una contraseña fuerte como las que podemos generar en gpassword.com. El comando para cambiar la contraseña a un usuario es:
sudo passwd usuario.
Donde usuario lo cambiaremos por el nombre de usuario al que queremos cambiar la contraseña.
Probado en un servidor Ubuntu Server 12.04 LTS. Llave RSA pública generada en Debian 6.0.