ssh-keygen

Como crear los “keys” para “ssh login” automático

Para los que bregamos con paginas web y desarrollo de aplicaciones basadas en tecnología web, el hacer ssh (remote login) a un servidor en el web es cosa de todos los dias.Vía ssh tenemos control absoluto de esos servidores remotos y nos permite usar herramientas como SVN o Git para desplegar (deploy) nuestras aplicaciones o web sites.

El problema es que si uno esta conectandose a varios servidores muchas veces al día y cada uno de estos tiene un password diferente, la cosa se vuelve complicada. Tengo una aplicación que me ayuda a recordar los passwords pero estoy cansado de copiar y pegar el mismo password 10 veces al día.

La solución a este problema es usar un ssh key. Cuando tienes un ssh key configurado no tienes que entrar el password cada vez que te conectas a un servidor que tiene tu “public key”. Para entender mejor un public key es como una cerradura en una puerta y el private key es la llave que lo abre. Puedes poner la misma cerradura a muchas puertas (servidores) y usar la misma llave para entrar a todas.

Para entender más facilmente (suponiendo que sabes trabajar con ssh):

  1. Tienes que crear un Public y un Private key
  2. Debes guardar el private key como si tu vida dependiera de ello
  3. Debes enviar el public key a todos los servidores o computadoras que te quires conectar

1. En tu computadora personal (Mac OS X / Linux) debes crear el Private y Public key. Esto es muy fácil, simplemente abre el terminal y entra:

ssh-keygen

Luego de entrado este comando te preguntará por un nombre para la pareja de “keys”. En este caso para dejar el nombre que pone por defecto, presionando enter en el teclado. Esto produce tanto el Public (id_rsa) como el Private key (id_rsa.pub). Luego te preguntará por un “passphrase” para el que puedes poner lo que quieras, pero debes recordarlo. Los dos files (id_rsa y id_rsa.pub) se crearán en el directorio .ssh dentro del home folder. Es importante el nombre de estos ficheros, a que renombrándolos no me ha funcionado.

2. Haz un backup de estos dos files. Son muy importantes y si alguien tiene acceso a ellos tambien tendrá acceso a todos los servidores o computadoras que usen esa pareja de llaves.

3. Ahora vamos a colocar el public key (id_rsa.pub) o la cerradura de la puerta al servidor donde queremos conectarnos. Para esto es necesario hacer login al servidor remoto via ssh para decirle que use este file cuando se este tratando de hacer un login desde nuestra computadora personal.

ssh [email protected]

Verifica que el directorio .ssh tiene permisos 700. Si no haces:

chmod 700 .ssh/

cd ~/.ssh

Ahora hay que crear un file para guardar los keys que este servidor acepta.

touch authorized_keys

chmod 600 authorized_keys

Ahora hay que poner nuestro Public key en este file.

Copiamos el contenido de id_rsa.pub con :

cat id_rsa.pub

Editamos el fichero donde almacenaremos esta clave:

joe /root/.ssh/authorized_keys

y pegaremos el contenido del id_rsa.pub que generamos en el servidor o equipo desde el que queremos acceder.

Listo ahora debemos volver a nuestra computadora personal. Si todo salió bien el servidor deberia permitirte conectarte sin perdir ningun password mas allá del passphrase que usaste al principio para genera los keys. De este momento en adelante podrás conectarte al servidor remoto usando solamente:

ssh [email protected]

En caso de tener algún problema al conectarnos por ssh del tipo:

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

debemos editar el fichero “known_hosts” para eliminar la línea que ha almacenado  cuando nos hemos conectado anteriormente desde la misma IP, para ello ejecutamos:

#ssh-keygen -f "/root/.ssh/known_hosts" -R [IP]:PUERTO_SSH

ejemplo:

#ssh-keygen -f "/root/.ssh/known_hosts" -R [192.168.0.1]:22

Aquí les dejo el enlace al mejor articulo que encontré sobre el tema.