Otro de mis pequeños proyectos

Usar pares de claves para acceder a los servidores de forma sencilla, cómoda y… segura

Este post se lo dedico a Luis que, con razón, siempre me pide que explique las cosas 🙂

Cuando te tienes que mover mucho entre servidores, uno de los principales problemas es tener que introducir el contraseña del usuario en el servidor al que te conectas. Este proceso se puede evitar de forma sencilla mediante partes de claves y ssh. Esto no te evita tener que usar una contraseña, pero será únicamente una y tienes que elegirla lo más robusta posible (para este post, la contraseña que tú elijas viene representada por AQUITUCONTRASEÑA).

Los pasos son los siguientes.

Crear el par de claves.

$ ssh-keygen -t dsa -f ~/.ssh/id_dsa
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): AQUITUCONTRASEÑA
Enter same passphrase again: AQUITUCONTRASEÑA
Your identification has been saved in ~/.ssh/id_dsa.
Your public key has been saved in ~/.ssh/id_dsa.pub.
The key fingerprint is:
60:92:6a:6e:48:b1:1a:2d:ae:51:9b:04:8a:9f:4c:6d tatai@localhost

Esto genera dos ficheros: ~/.ssh/id_dsa y ~/.ssh/id_dsa.pub que son la clave privada y la clave pública respectivamente.

Ahora tenemos que copiar la clave pública en el servidor remoto (podremos copiar la clave en tantos servidores como nos haga falta). Para ello, teniendo en cuenta que queremos acceder a server.com con el usuario user, usamos el siguiente comando:

$ ssh-copy-id -i ~/.ssh/id_dsa user@server.com

Tras este comando, el sistema pedirá (por última vez) la contraseña del servidor para ese usuario.

Una vez tengas estos dos pasos hechos, verás como si intentas realizar una conexión ssh al servidor:

$ ssh user@server.com

Entrarás directamente, sin que te pida contraseña.

No sólo podrás realizar sesiones ssh (o ejecución de comandos mediante ssh), sino que también podrás usar scp, sftp, etc… y sin tener que introducir la contraseña.

Por último, comentar un par de cosas con respecto a todo este proceso. Lo primero es que se necesita un denominado agente de sesión ssh que se encarga de cachear las claves. Este agente se puede llamar mediante el comando ssh-agent. Por defecto, los gestores gráficos (gdm, kdm, etc) lo instancian al arrancar y por eso, mientras uses tu máquina y usuario en el entorno gráfico, no tendrás que llamarlo, pero en el caso de que te conectes a tu máquina, en general, no tendrás este agente ni tendrás clave autentificada. En este caso, tendrás que ejecutar los siguientes comandos:

$ ssh-agent bash
$ ssh-add ~/.ssh/id_dsa
Enter passphrase for ~/.ssh/id_dsa: AQUITUCONTRASEÑA

El primero de los comandos abre una consola bash con el agente de sesión ssh y con el segundo, añadimos la clave anteriormente creada de modo que el sistema nos considera autentificado.

Y ya para finalizar, comentar que puedes disponer de varios pares de claves, cada uno con su correspondiente contraseña, método de encriptación (rsa o dsa), número de bits, etc. Tan sólo es necesario cambiar el nombre del fichero que se usa. Se recomienda crearlos todos bajo el directorio .ssh en nuestra cuenta.

Update (2010-02-04): gracias a Mariotux que me ha avisado que tení­a mal algunas llamadas ( s/rsa/dsa/g :p)

1 comentario

  1. poisonbit

    Hola Tatai,

    Va por el update de 2010-02-04, de dsa Vs rsa.

    Hoy en dí­a RSA == RSA2 🙂

    El «default» (sin -t) es RSA y por defecto de 2048bits (con menos de 1024 es petable). Con -t dsa genera siempre claves de 1024bits (aunque DSA hace más en menos espacio).

    Con RSA puedes subir p.ej. -b 4096. DSA nunca usa más de 1080bits.

    Además RSA no tiene problemas de patentes en USA, ni al gobierno americano implicado en su código :).

    Y una clave RSA puede servir para firmar… y para encriptar. Una clave DSA solo sirve para firmar.

    Por ejemplo en el proyecto Debian (imagino q Ubuntu también) para ser developer hace falta RSA.

    Respecto a la velocidad, DSA es más rápido firmando, pero es más lento verificando (el uso diario).

    Al final funciona igual de bien con cualquiera de los dos, son detalles secundarios 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *