SSH sin password empleando llaves pública/privada

Hola a todos de nuevo,500x_sshot-2010-09-09-1-04-40-43

cada vez que tengo que configurar un servidor me hago la picha un lío con el asunto de ssh-keygen. Nunca me acuerdo de cómo se montan las llaves para evitar el incordio de la petición de password al conectar.

Bien, el asunto es el siguiente. Contamos con 2 máquinas:

  • Máquina A que es un servidor ssh
  • Máquina B que es un cliente de ssh

La gracia del asunto es conectar mediante ssh desde la máquina B a la máquina A sin que se nos solicite una contraseña. Esto es muy útil para por ejemplo ejecutar tareas desatendidas desde B en A.

En mi caso, la máquina B es una máquina de backup y la máquina A es un servidor de ficheros. Toda la información la almaceno en la máquina A siempre mientras la máquina B está la mayor parte de su tiempo apagada. Una vez al mes enciendo la máquina B y lo que me interesa en llevarme una copia de los datos nuevos o modificados de A. Para ello ejecuto un comando rsync que necesita de acceso SSH. Si tengo bien montado el asunto, la copia la realiza completa la máquina B sin necesidad de intervención por mi parte, y además lo puede hacer en segundo plano. Si no tuviese bien configuradas las llaves, me pediría la contraseña de acceso cada vez que lanzo un rsync, lo que hace inviable su uso desatendido.

Bien, ¿como se prepara este asunto?, los pasos son sencillos:

  • En la máquina A que es el servidor, dentro del home del usuario que va a conectar remotamente a la sesión ssh podemos encontrar un directorio con el nombre .ssh. El punto anterior al nombre es debido a que es un directorio «oculto»
  • Lo normal es que en ese directorio ya existan un par de llaves, una pública y otra privada. La clave pública es la que termina con la extensión .pub y la privada la otra. Por ejemplo id_rsa como privada e id_rsa.pub como pública y ambas de tipo rsa.
  • Si no existiesen esas claves las podemos generar con el comando ssh-keygen sin ningún problema
  • Bien, en estas condiciones abrimos una sesión en la máquina B con el usuario que queremos conectar en la máquina A
  • Entramos en $HOME/.ssh y verificamos que exista un fichero con nombre authorized_keys y permisos 600. Si no existe lo creamos y le damos los permisos adecuados.
  • Ahora copiamos el contenido del fichero $HOME/.ssh/id_rsa.pub de la MÁQUINA A (servidor) en el fichero  $HOME/.ssh/authorized_keys de la MÁQUINA B (cliente) y lo guardamos.
  • Ahora podemos probar a conectar mediante ssh desde la máquina B a la máquina A y si todo lo hemos hecho bien debiera acceder a la sesión sin solicitar la clave del usuario.

Un saludo a todos y hasta la próxima.