Ir al contenido

10 agosto, 2009

Login con clave pública con SSH

Algo muy cómodo al administrar equipos es utilizar el esquema de clave pública y clave privada. Resulta muy interesante también a la hora de programar un script que necesite conectarse a un servidor para copiar archivos o ejecutar comandos en él.

Esta estrategia se basa en la criptografía asimétrica y consiste en un par de claves, precisamente una clave privada que se almacena en el equipo de administración con gran seguridad y una clave pública que se distribuye a los demás equipos. Entonces, cada vez que el equipo de administración se quiere loguear a uno de los equipos que tienen su clave pública, éste genera un mensaje cifrado con su clave privada que descifra el otro equipo utilizando la clave pública. Así, el equipo destino sabe que quien intenta autenticarse es quien dice ser, dado que es el único que conoce la clave privada.

Lo anterior nos da la posibilidad de autenticarnos a un equipo sin la necesidad de suministrar una contraseña o reforzar la seguridad exigiendo ambas cosas para la autenticación. Con esto último, si alguien pudiera descifrar nuestra contraseña aún necesitaría la clave privada y viceversa.

Luego de esta introducción veremos cómo lograr el primero de los casos entre dos equipos con Linux. Los pasos a seguir son:

  • Generar el par de claves en el equipo desde el cuál nos autenticaremos a los demás. Nos pedirá una contraseña que no vamos a suministrar, de lo contrario la deberemos ingresar al autenticarnos al otro equipo.

leandro@scarlet-ubuntu:~$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/leandro/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/leandro/.ssh/id_rsa.
Your public key has been saved in /home/leandro/.ssh/id_rsa.pub.
The key fingerprint is: af:72:d1:4d:84:33:d6:c4:50:d3:7c:ff:e3:28:90:25 leandro@scarlet-ubuntu

Si analizamos los archivos creados en el directorio .ssh encontraremos: id_rsa e id_rsa.pub. La primera de ellas es la clave privada que estará protegida para lectura por todos los demás usuarios y la segunda la pública.

  • Copiar la clave pública al host destino. Para ello, es necesario pegar el contenido del archivo id_rsa.pub del host de administración en un archivo llamado authorized_keys en el host destino, una clave pública por línea. También existe en Linux una utilidad que hace este trabajo por nosotros. Para ello, desde el equipo de administración:

leandro@scarlet-ubuntu:~$ ssh-copy-id 192.168.1.2

The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established. RSA key fingerprint is 2d:6a:7f:9a:71:ff:32:ae::09:3b:23:9e:70:70:8d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.2' (RSA) to the list of known hosts
Password:

Now try logging into the machine, with "ssh '192.168.1.2'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.

  • Con lo anterior ya está todo listo para poder entrar al equipo remoto sin contraseña como se ve a continuación:

leandro@scarlet-ubuntu:~$ ssh 163.10.41.2
Last login: Mon Aug 10 08:18:32 2009
scarlet:~ leandro$

Notar que si bien esto puede resultar muy práctico en muchos casos también supone un riesgo de seguridad, dado que si la máquina de administración se ve comprometida entonces el atacante podrá acceder a todos los servidores que tengan la clave pública de la misma.

Posts relacionados:

¿Qué opinas?, introduce un comentario.

(required)
(required)

Nota: Se permite código HTML. Tu correo electrónico nunca será publicada.

Suscríbete a los comentarios

Spam Protection by WP-SpamFree