Autentificación trasparente por clave pública/privada con OpenSSH

agradecimiento a :http://www.vicente-navarro.com/blog/2008/01/13/autentificacion-trasparente-por-clave-publicaprivada-con-openssh/

El protocolo SSH está preparado para que podamos autentificarnos de forma transparente (sin introducir una contraseña manualmente). Para ello, lo que hacemos es generar una pareja de claves pública/privada (podemos tener varias, una por protocolo) en el cliente de SSH y a continuación, al servidor de SSH le especificamos una serie de claves públicas de clientes que, si acceden con la clave privada asociada, pueden entrar sin especificar una contraseña.

Cómo hacer esto en concreto varía entre implementaciones de cliente y servidor de SSH, pero si estamos usando OpenSSH, que es lo estándar tanto en Linux y *BSD, como en Cygwin, sólo hay que seguir unos sencillos pasos que vamos a ver a continuación.

El primer paso es generar la pareja de claves pública/privada en el cliente con el comando ssh-keygen:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/supercoco/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/supercoco/.ssh/id_rsa.
Your public key has been saved in /home/supercoco/.ssh/id_rsa.pub.
The key fingerprint is:
5c:7b:3d:44:21:09:84:a1:e6:8b:42:4e:ec:39:d6:92 supercoco@cliente

Si no le especificamos opciones, el comando crea una clave RSA de 2048 bits, pero podemos cambiar este comportamiento. Por ejemplo, para clave DSA de 1024 bits, sería:

$ ssh-keygen -t dsa -b 1024
Generating public/private dsa key pair.
Enter file in which to save the key (/home/supercoco/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/supercoco/.ssh/id_dsa.
Your public key has been saved in /home/supercoco/.ssh/id_dsa.pub.
The key fingerprint is:
91:84:38:fd:03:b4:74:5a:1c:ad:48:c4:da:57:3b:cc supercoco@cliente

Hay que tener en cuenta que si le especificamos una passphrase, tendremos que introducirla manualmente cada vez que queramos usar la clave privada, por lo que la autentificación no será transparente. Por ello, aunque no sea lo más seguro, para nuestro propósito es necesario dejarla en blanco.

Y ahora sólo tenemos que copiar el contenido el fichero id_dsa.pub o del id_rsa.pub en el fichero authorized_keys del directorio $HOME/.ssh/ del usuario del sistema con servidor SSH al que queremos acceder.

Por ejemplo, si queremos entrar en el servidor SSH con el usuario ranagustavo, tendríamos que añadir el contenido de los ficheros/home/supercoco/.ssh/id_dsa.pub o /home/supercoco/.ssh/id_rsa.pub del cliente de SSH al fichero/home/supercoco/.ssh/authorized_keys del servidor de SSH.

Si tenemos la contraseña para entrar, podríamos incluso hacerlo desde el cliente con un par de comandos:

$ scp $HOME/.ssh/id_dsa.pub ranagustavo@servidor:id_dsa.pub.supercoco.cliente
Password:
id_dsa.pub
$ ssh ranagustavo@servidor 'cat id_dsa.pub.supercoco.cliente >> .ssh/authorized_keys'

y ya podemos entrar sin introducir la contraseña:

$ ssh ranagustavo@servidor
Linux servidor 2.6.22 #2 SMP Sun Dec 9 19:33:44 CET 2007 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No mail.
Last login: Sun Jan 13 22:12:58 2008 from cliente
ranagustavo@servidor ~ $

Si no funciona, es porque los permisos del directorio .ssh y del fichero authorized_keys son demasiado permisivos, por lo que puede ser necesario hacer lo siguiente en el servidor usando el usuario apropiado (es recomendable hacerlo siempre por si acaso):

$ chmod 700 $HOME/.ssh
$ chmod 600 $HOME/.ssh/authorized_keys

Una vez que esté configurado correctamente, podemos incluso querer configurar el servidor de SSH para que no acepte clientes que quieran entrar por el método estándar, la contraseña. Para ello, partiendo de la configuración estándar de Debian (con otras configuraciones base, puede ser necesario hacer más cosas), sólo tenemos que cambiar los parámetros ChallengeResponseAuthentication y PasswordAuthentication del fichero/etc/ssh/sshd_config a “no“:

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords                                            
PasswordAuthentication no

Con un “/etc/init.d/ssh reload” conseguiremos que el sshd relea la configuración.

Y como apunte extra, cómo configurar PuTTY para acceder a OpenSSH: Secure Linux/UNIX access with PuTTY and OpenSSH

:wq

Entradas relacionadas