2012-05-08 14:22:34 +0000 2012-05-08 14:22:34 +0000
147
147

¿Qué es una huella de la llave SSH y cómo se genera?

Siempre encuentro que recibo este mensaje cuando ssh en una nueva máquina:

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

¿Qué significa? ¿Todas las máquinas tendrán la misma huella dactilar cada vez?

¿Cómo se generan estas huellas dactilares? ¿De qué parámetros dependen?

Respuestas (5)

128
128
128
2012-07-24 16:26:09 +0000

Puede generar una huella digital para una clave pública usando ssh-keygen de la siguiente manera:

ssh-keygen -lf /path/to/key.pub

Ejemplo concreto (si usa una clave pública RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

La primera parte (2048) es la longitud de la clave en bits, la segunda parte (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff) es la huella digital de la clave pública y la tercera parte es la ubicación del propio archivo de clave pública.

En las versiones más recientes de OpenSSH, se muestra el SHA-256 codificado en Base64 en lugar del MD5 hexadecimal. Para mostrar el hash de estilo heredado, usa

$ ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
74
74
74
2014-02-08 20:40:35 +0000

La huella dactilar es el MD5 sobre los datos binarios dentro de la clave pública codificada en Base64.

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[RSA 2048]----+
| +*..+* |
| =. +.= |
| . . .o . |
| o+ E |
| S= . + o |
| . o o + |
| . . |
| |
| |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19

La md5sum 6530389635564f6464e8e3a47d593e19 es la huella dactilar que se muestra cuando se genera la clave, sólo que sin los dos puntos de separación.


Sin embargo, si se trata de las huellas dactilares que Amazon muestra en la consola de pares de teclas del EC2 desafortunadamente eso puede ser una bestia diferente . Si es una cadena hexagonal de 32 dígitos, es la huella estándar de clave pública MD5 SSH de arriba. Pero si son 40 dígitos hexagonales, es en realidad una huella dactilar calculada tomando el SHA1 de la clave privada en formato PKCS#8:

$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58
69
69
69
2012-05-08 14:41:50 +0000

La huella dactilar se basa en la clave pública del host, normalmente basada en “/etc/ssh/ssh_host_rsa_key.pub” Generalmente es para una fácil identificación/verificación del host al que se está conectando.

Si la huella dactilar cambia, la máquina a la que se está conectando ha cambiado su clave pública. Esto puede no ser algo malo (sucede al reinstalar ssh), pero también podría indicar que te estás conectando a una máquina diferente en el mismo dominio/IP (sucede cuando te conectas a través de algo como el balanceador de carga) o que estás siendo atacado con un ataque de hombre en el medio, donde el atacante está de alguna manera interceptando/redireccionando tu conexión ssh para conectarse a un host diferente que podría estar husmeando tu usuario/pw.

En resumen: si te advierten de un cambio en la huella digital, sé prudente y comprueba que te estás conectando al host correcto a través de una conexión segura. Aunque la mayoría de las veces esto es inofensivo, puede ser una indicación de un problema potencial

Ver: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html y: http://en.wikipedia.org/wiki/Publickey_fingerprint

23
23
23
2019-03-29 21:52:44 +0000

Si quieres comprobar un archivo de clave SSH para ver si es la misma que la reportada como “Deploy key” por github, esto es para ti…

Desde la URL privada: https://github.com/\/\Nrepo\Nnombredeusuario/settings/keys verás

En la terminal:

$ ls -l id*
-rw------- 1 bruno staff 1675 Mar 29 17:03 id_rsa
-rw-r--r-- 1 bruno staff 416 Mar 29 17:03 id_rsa.pub

$ ssh-keygen -E md5 -lf id_rsa
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

$ ssh-keygen -E md5 -lf id_rsa.pub
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

Ese mismo comando puede ser combinado con una característica de GitHub, que es el hecho de que sirven públicamente las claves públicas de SSH de los usuarios en https://github.com/ .keys

Aquí hay una línea que puedes usar para aprovecharla.

$ curl -sL https://github.com/RichardBronosky.keys | while read; do echo -e "\nkey #$((++i)):"; ssh-keygen -E md5 -lf - <<<"$REPLY"; echo $REPLY; done

key #1:
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJGT35gvsFveu+80qgurrLHId0h55E9jliM7Fo0mV9b7eg3EfyagkAcJUSMFkoov3HY4CW0yzOc7WlN57ABwvpRz1ioFDex0n0FkjoSEs5ROeT1OneRK6Bf6XnplgPuQ/LSSkv3kmK6I29R+YWi6TjDvLLoA5BrXJjOMfUv36jxWCDtk/5ZdhMZqhsMuDm06Jg5JBu6n5jQaZkmaIaunz7vOfwVG9LoCI+MYyIdo2S4VTva7Ee7jfAvgSUUgHTjhzsPO0/Ww5a/Kz2ehXW27aJxj/QPLfYR2LmTMbQKm3WpB8P1LjoiU7zjPoVoZ43a4P2JLUDidGKCd3eY5b5xewz

key #2:
2048 MD5:f7:98:f1:0b:73:c6:2a:21:00:7a:70:1d:0f:cf:d8:cc no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCQsZrjwKjB4WnE4SwVdDX5eEMxKzPHFBVKKpo9vvWUXRQwdTZy6iVOkyF26IPR+xDPzslzXOClKXUrWEh6La/EMpRwuMrWAbMIJFeDHOb56q4azgopoJmMJHo0yxGu0Ts4XszMACYRhlG6uK2AP5SYiOTp1zKPFjazXAdwLXyOvJurzy6KKuGJdSs/sj9+4uehgyRNOhehCSfg71tJJYwRvO2DDfLgaVEKOgZx58gEnJfhhz9D7rbvdZNhw/hCgtVNJaQF9Mdke2OPwWSo8i0/XNb9Bu/GRXqwMZrxDBhyzieocW40cwuzxWfzoi03aISdtQ1HtawH8+/sswviM1+B
1
1
1
2017-11-26 04:32:06 +0000
ssh-keygen -r host.name.com

Se obtendrán las huellas dactilares de todas las claves públicas configuradas en una instancia sshd.

Estas pueden ser puestas en DNS SSHFP registros.