Conexión SSH a Una máquina por Primera Vez

SSH utiliza cifrado de clave pública para autentificar la máquina remota y permitir a la máquina remota la autentificación del usuario.

El Fichero .ssh/_knownhosts

En SSH1 y OpenSSH las claves de máquinas se mantienen en etc/ssh_knownhosts y en el directorio del usuario ~/.ssh/known_hosts. Es posible cambiar la ubicación de estos ficheros usando en el fichero de configuración ~/.ssh/config la opción UserKnownHostsFile.

Al establecer por primera vez una conexión con ssh o sftp se nos avisa de la posibilidad de que la máquina no sea quien aparenta:

nereida:~> sftp user@machine.ull.es
Connecting to machine.ull.es...
The authenticity of host 'machine.ull.es (193.312.112.190)' can't be established.
RSA key fingerprint is a4:1e:f1:35:0d:b1:6c:7d:5c:3e:86:ef:4c:17:8a:a9.
Are you sure you want to continue connecting (yes/no)? yes
Si respondemos yes la conexión continúa:
Warning: Permanently added 'machine.ull.es' (RSA) to the list of known hosts.
user@machine.ull.es's password:
sftp> bye

Algoritmo de Autentificación de las Máquinas

Esta precaución se toma por si el adversario subvierte el servidor de nombre para que machine.ull.es sea resuelta a su máquina. A continuación puede hacer un forward de la conexión solicitada a la verdadera máquina machine.ull.es. Este es un caso de man-in-the-middle-attack.

El cliente ssh mantiene en ~/.ssh/known_hosts una base de datos conteniendo las máquinas a las que el usuario se ha conectado. Cualquier nuevo hosts es añadido al fichero del usuario:

nereida:~> grep 'machine.ull.es' ~/.ssh/known_hosts
machine.ull.es ssh-rsa KEY.....

Borrando una Entrada de .ssh/known_hosts

Si la relación entre la IP de la máquina y su nombre cambian ssh nos avisa. Si confiamos en el cambio podemos borrar la entrada en el fichero ~/.ssh/known_hosts. De otro modo ssh se negará a efectuar la conexión. Podemos borrarla manualmente o con el comando:

casiano@cc116:~$ ssh-keygen -R rala
/home/casiano/.ssh/known_hosts updated.
Original contents retained as /home/casiano/.ssh/known_hosts.old

Hashing

Supongamos que el atacante ha descubierto nuestra clave y ha entrado en nuestro servidor: ahora puede hacer cat ~/.ssh/known_hosts y deducir que otros servidores solemos visitar. Es incluso probable que la clave sea la misma o que tengamos un sistema de autentificación sin passphrase.

Si se quiere proteger el fichero known_hosts se puede usar la opción -H de ssh-keygen:

casiano@cc116:~/.ssh$ ssh-keygen -H
/home/casiano/.ssh/known_hosts updated.
Original contents retained as /home/casiano/.ssh/known_hosts.old
WARNING: /home/casiano/.ssh/known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames

Este comando reemplaza los nombres de los servidores y las direcciones con representaciones hash. Estas versiones hash pueden ser usadas por ssh pero son ilegibles para un humano. Es posible usar un fichero con una combinacion de entradas hash y entradas legibles.

La opción HashKnownHosts permite en los ficheros de configuración permite indicarle a ssh que debe hacer hashing sobre los nombres y las direcciones en ~/.ssh/known_hosts. Esto no afecta a las ya existentens en el fichero.

Es posible asociar varios nombres/direcciones con la misma clave (o repetirlas):

foo1,foo,192.168.1.1,192.168.1.10 ssh-rsa AAAAB3Nsomething[...]
foo2,foo,192.168.1.2,192.168.1.10 ssh-rsa AAAAB3Nsomethingelse[...]

Búsqueda de Entradas Hash

Es posible encontrar las entradas en un fichero hash con la opción -F

casiano@cc116:~/.ssh$ ssh-keygen -F millo
# Host millo found: line 10 type RSA
|1|BXG98oZImAlC02AQMAmuDb0jadQ=...

Ejercicios con known_hosts

Ejercicio 2.1.1   Elimine una entrada en el fichero si existe e intente la conexión ¿que ocurre?

Ejercicio 2.1.2   Pase a modo hashed su fichero

Ejercicio 2.1.3   Busque por una entrada en el fichero hashed



Subsecciones
Casiano Rodríguez León
2010-03-22
$HOME $HOME/.ssh $ chmod 600 $HOME/.ssh/authorized_keys

Inténtelo de nuevo usando la opción -v de ssh:

pp2@nereida:/tmp$ ssh -v -v remotename@machine uname -a

Véase también

Ejercicios

Ejercicio 2.1.5   Cree una identidad y transfierala manualmente.

Ejercicio 2.1.6   Cámbiele la passphrase a una identidad

Ejercicio 2.1.7   Cámbiele el comentario a una identidad

Ejercicio 2.1.8   Copie el fichero de clave privada de su cuenta de usuario u1 en m1 a otra cuenta u2 en la máquina m1. Intente ahora conectarse siendo el usuario u2 de m1 a la máquina rm en la que situó la clave pública como usuario ru:

u2@m1:~/$ ssh ru@rm

¿Sigue funcionando la autentificación automática?

Ejercicio 2.1.9   Copie ahora el fichero de clave privada de su cuenta de usuario u1 en m1 a otra cuenta w1 en una máquina distinta mw. Conéctese desde mw a rm en la que situó la clave pública como usuario ru:
mw@w1:~/$ ssh ru@rm
¿Funciona? ¿Como afectan los resultados a su percepción de la seguridad de las comunicaciones con ssh?

Ejercicio 2.1.10   Considere una intranet en la que su HOME de usuario esta en un sistema de archivos compartido. Genere (si no la ha echo ya) su pareja de claves privada y pública. Publique la clave usando $ssh-copy-id o bien - si $ssh-copy-id no está disponible - copiando la clave pública en el fichero authorized_keys. ¿Se obtiene autorización automática entre dos máquinas cualesquiera de la red?



Subsecciones
Casiano Rodríguez León
2010-05-05