Una de las debilidades en el uso de mecanismos de confianza definidos mediante archivos .rhosts en Unix es que los programas tales como rsh y rlogin simplemente se basan en una dirección IP para autenticar a la máquina en quien confían, y dado que las direcciones IP pueden ser falsificadas, este mecanismo de confianza no es seguro. Peor aún, toda la información que transita entre una y otra máquina lo hace “en claro” o sin ser cifrada, lo cuál resulta en un fallo de seguridad grave pues atenta contra la propiedad de confidencialidad de la información.
Una manera más segura de realizar la automatización de procesos o accesos a diferentes equipos, consiste en el mecanismo de confianza definido mediante llaves de ssh.
Para implementar este mecanismo, es necesario definir las 4 entidades que participarán en la relación de confianza: una máquina cliente (mcliente), un usuario en la máquina cliente (ucliente), una máquina servidor (mservidor) y un usuario en la máquina servidor (uservidor).
El objetivo de este mecanismo, es que, ucliente se pueda conectar, sin utilizar contraseña, al equipo mservidor, como el usuario uservidor, desde el equipo mcliente.
Para configurar esta relación de confianza seguiremos estos pasos:
- Conectarse a mcliente con el usuario ucliente
- Crear una llave de tipo DSA con una longitud de 1024 bits para el protocolo SSHv2 con una frase de paso (passphrase) nula (ingresar ENTER cuando se solicite la frase de paso):
[ucliente@mcliente ~]$ ssh-keygen –t dsa –b 1024
Generating public/private dsa key pair.
Enter file in which to save the key (/home/ucliente/.ssh/id_dsa): [ENTER]
Created directory ‘/home/ucliente/.ssh’.
Enter passphrase (empty for no passphrase): [ENTER]
Enter same passphrase again: [ENTER]
Your identification has been saved in /home/ucliente/.ssh/id_dsa.
Your public key has been saved in /home/ucliente/.ssh/id_dsa.pub.
The key fingerprint is:
18:c8:a8:80:32:bf:12:d3:4b:1d:f6:ae:35:d7:e4:e0 ucliente@mcliente
Este comando genera una llave privada contenida en el archivo $HOME/.ssh/id_dsa y una llave pública contenida en el archivo $HOME/.ssh/id_dsa.pub.
- Conectarse desde mservidor a mcliente usando SSH y terminar la sesión (este paso es únicamente para que automáticamente sea creado el subdirectorio $HOME/.ssh y dentro se guarde la llave de mcliente, en el archivo known_hosts):
$ ssh ucliente@mcliente
The authenticity of host ‘mcliente’ can’t be established.
RSA key fingerprint in md5 is: 4b:3c:9b:d7:d9:ed:9d:89:05:76:3b:4a:45:32:fc:a0
Are you sure you want to continue connecting(yes/no)? yes
Warning: Permanently added ‘mcliente,10.98.201.145’ (RSA) to the list of known hosts.
ucliente@mcliente’s password:********
Last login: Mon Sep 7 11:51:59 2009 from mservidor
$ exit
- Transferir de forma segura la llave pública creada en mcliente y colocarla en el directorio .ssh recién creado en mservidor:
$ cd .ssh
$ scp ucliente@mcliente:.ssh/id_dsa.pub .
id_dsa.pub 100% |*************************| 600 00:00
- Crear el archivo authorized_keys. Este archivo debe contener la llave id_dsa.pub (y el resto de las llaves, en caso de que se requiera configurar más de una):
$ cat id_dsa.pub >> authorized_keys
$ chmod 600 authorized_keys2
$ rm id_dsa.pub
- Probar el acceso a mservidor desde mcliente:
[ucliente@mcliente ~]$ ssh uservidor@mservidor
The authenticity of host ‘mservidor’ can’t be established.
RSA key fingerprint in md5 is: 77:83:db:48:12:ea:15:70:04:ec:8c:22:36:de:b4:15
Are you sure you want to continue connecting(yes/no)? yes
Warning: Permanently added ‘mservidor,10.98.201.166’ (RSA) to the list of known hosts.
Last login: Mon Jul 11 11:03:29 2005 from ucliente
You have new mail.
$ hostname
mservidor
$ exit
NOTAS IMPORTANTES:
- Si mservidor está corriendo la versión 1.0 de SSH , el archivo authorized_keys debe llamarse authorized_keys2.
- Tanto el directorio HOME de uservidor como el subdirectorio .ssh deben tener permisos 700 y deber ser propiedad del usuario y grupo definidos en el archivo /etc/passwd.
- La llave privada de ucliente ($HOME/.ssh/id_dsa) debe tener los permisos 600.
- Resulta útil hacer uso de la opción verbose en el cliente de SSH para detectar errores de configuración:
[ucliente@mcliente ~]$ ssh -v uservidor@mservidor
Este comando genera una llave privada contenida en el archivo $HOME/.ssh/id_dsa y una llave pública contenida en el archivo $HOME/.ssh/id_dsa.pub.