Conexión SSH sin contraseñas


SSH keys

Seguramente harás tenido que trabajar con un servidor remoto usando ssh en más de una ocasión. Si bien es cierto que la se incrementa al usar un protocolo cifrado, también es cierto que realizar varias conexiones de forma repetitiva puede llegar a ser tedioso el hecho de introducir la contraseña una y otra vez. Con ssh se tiene la opción de deshabilitar la petición de contraseñas haciendo uso solo de las llaves publicas del cliente. Aquí veremos cómo hacer esto.

NOTA: Ten en cuenta que esto puede ser un problema de seguridad, en especial si alguien llega a ganar acceso a una sesión local en el cliente ssh, ya que tendrá acceso a tu cuenta en el servidor remoto.

Generación de llave

Para generar una llave pública del usuario del lado del cliente, se debe usar ssh-keygen como se muestra a continuación:

lgallard@moody:~$ ssh-keygen  -t rsa -N ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lgallard/.ssh/id_rsa): 
Your identification has been saved in /home/lgallard/.ssh/id_rsa.
Your public key has been saved in /home/lgallard/.ssh/id_rsa.pub.
The key fingerprint is:
b0:53:cc:bd:44:cb:f8:39:81:5c:09:ae:66:1b:90:c8 lgallard@moody
The key's randomart image is:
+--[ RSA 2048]----+
|        ..o.     |
| . . . = B..     |
|  E o . O *      |
|     . = o +     |
|      B S =      |
|     o +   .     |
|      .          |
|                 |
|                 |
+-----------------+

Copiando la llave

Puedes usar una combinación de ssh y la salida estándar para agregar la llave pública en el servidor remoto, el cual corre el servicio ssh en el puerto 2022:

lgallard@moody:~$ cat ~/.ssh/id_rsa.pub | ssh -p 2022 lgallard@servidor.com 'cat - >> /home/lgallard/.ssh/authorized_keys' 

También puede hacerse por pasos, es decir:

  1. Copiamos la llave en el servidor:
    lgallard@moody:~$ scp -P 2022 ~/.ssh/id_rsa.pub lgallard@servidor.com:/home/lgallard/moody.pub
  2. Entramos al servidor y agregamos la llave pública:
    lgallard@moody:~$ ssh -p 2022 lga[email protected]
    [email protected] [~]#  cat moody.pub >> /home/lgallard/.ssh/authorized_keys
    [email protected] [~]# rm moody.pub

¿Cómo funciona?

Sencillo, ahora cuando quieras conectarte al servidor ssh no te pedirá la contraseña. Igual ocurrirá al copiar archivos de forma remota con scp.

Referencia: man ssh


,

  1. #1 by Luis Gallardo on 13/02/2012 - 10:31

    @Rafael Si bien es cierto que ssh-copy-id hace el trabajo carece de la opción especificar el puerto del servidor remoto (cosa que podemos hacer con ssh -p). Y más aun si te fijas en el manual de ssh-copy-id te darás cuenta de que es un script, el cual al consultar vemos que hace lo siguiente:

    { eval “$GET_ID” ; } | ssh ${1%:} “umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys” || exit 1

    Es decir, a la larga hace el cat. Es válido tu comentario, siempre y cuando el servidor ssh corra en el puerto 22.

    Gracias por tu comentario y por compartir la orden ssh-copy-id. Saludos!

  2. #2 by Rafael A. Isturiz L. on 13/02/2012 - 9:15

    Efectivamente el método que mencionas funciona, pero tenemos para copiar la llave “ssh-copy-id”:

    ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ip

    Así no usamos cat y el comando es mas corto ;)

    Saludos.

(No será publicado)