Cómo verificar la huella digital del host en Openssh

6

¿Cómo puedo verificar la huella digital del nuevo host conectado cuando intento conectarme desde mi máquina remota a la máquina doméstica? En la primera conexión obtuve esto:

[email protected]$ ssh [email protected]:~/
The authenticity of host '[home-machine.org]:222 ([x.xx.xx.xx]:222)' can't be established.
ECDSA key fingerprint is SHA256:6lr/VtTwgrKZVNZQ8y8Le/ilfBYfo0e+9UliSg+AD2k.
Are you sure you want to continue connecting (yes/no)? 

¿Cómo puedo verificar la huella digital de mi "máquina doméstica"? Estaba tratando de enumerarlos en la máquina de mi casa de esta manera:

[email protected]:~$ for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file};  done
1024 d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49 /etc/ssh/ssh_host_dsa_key.pub (DSA)
256 d9:25:51:16:ca:76:bd:8f:b8:6a:79:a2:1c:81:4b:4c /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
2048 3a:c6:2d:29:7c:b9:16:e8:ed:1c:a8:26:5d:ab:0d:1e /etc/ssh/ssh_host_rsa_key.pub (RSA)
[email protected]:~$ 

Pero esas teclas parecen estar en un formato diferente. ¿Es esta una especie de MD5 de huella digital? ¿Cómo puedo tener esas huellas digitales en formato unificado?

Emisor
fuente

Respuestas:

4

Su servidor ssh proporciona hashes de clave pública sha256, que es mucho más seguro que los hash md5.

Luego debe especificar a ssh-keygen que desea sha256 en lugar de hashes md5. Intente ejecutar el comando en su máquina doméstica :

for pubkey_file in /etc/ssh/*.pub; do ssh-keygen -lf ${pubkey_file} -E sha256; done

vera
fuente
1
OpenSSH debería tener el valor predeterminado sha256. Si no es así, probablemente significa que la versión de OpenSSH en la máquina cliente es antigua y no es compatible con sha256. Por lo tanto, el -Ecambio no ayudará muy probablemente.
Martin Prikryl
Tienes razón, este debería ser el valor predeterminado. Sin embargo, d1:ef:db:b4:24:fc:ca:fe:e1:11:8c:36:0a:77:90:49es un hash MD5. @Emiter debería actualizar el paquete openssh-client ; y muy probablemente openssh-server
vera
Gracias. El cliente ([email protected]) tenía openssh v = 6.7p1. Lo actualicé a 7.5p1. Ahora puede mostrar hash de claves Sha256. Parece que la versión 6.7p1 no pudo mostrarlo (no había un interruptor "-E").
Emisor
1

Comandos utilizados

  • Muestre el arte ascii de la clave de host pública almacenada en el servidor (que debe hacerse en el lado del servidor, al que se conecta a través de ssh):

    ssh-keygen -l -v -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    -l : muestra la huella digital del archivo de clave pública especificado.

    -v : visual (arte ascii)

    -E md5 : el algoritmo hash utilizado para calcular la huella digital ("md5" o "sha256"). (Se prefiere "sha256" si está disponible). (puede no estar disponible en versiones anteriores de ssh-keygen)

    -f : archivo

  • Muestre el arte ascii de la clave de host pública del servidor remoto (para hacerla en el lado del cliente, desde la que se conecta a través de ssh):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o : opción

    visualhostkey : visual (ascii-art)

    FingerprintHash : hash algo para usar (use el mismo que el que obtiene del servidor: md5 o sha256)

Qué hacer para verificar la autenticidad de un host / servidor

Primero, 1. debe hacerse localmente en el servidor (al que desea conectarse a través de ssh): le dará un primer ascii-art. Imprímelo o toma una foto.

Segundo, 2. debe hacerse en la primera conexión SSH; mostrará un segundo arte ascii. Si el arte ascii es el mismo, entonces puedes responder a "¿Confío?" pregunta (es decir Are you sure you want to continue connecting (yes/no)).

Ejemplo

  • Lado del servidor
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6   (ECDSA)
+--[ECDSA  256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+-----------------+
  • Lado del cliente
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)? 

Alguna explicación más

El primer comando mostrará el arte ascii correspondiente a la huella digital del archivo que ingresa (y la propia huella digital). El archivo que ingresa como entrada es la clave de host pública del servidor. Cuando un cliente se conecta (no solo por primera vez), el servidor enviará su clave de host pública. Esta clave de host pública se buscará en~/.ssh/known_hosts. Si la clave pública está en el archivo, entonces está bien: se conoce el host (servidor), por lo que pasamos al siguiente paso para autenticar al usuario (la autenticación del usuario no se describe en esta publicación). Si la clave pública no está en el archivo, el cliente calculará la huella digital de esta clave de host pública con un algoritmo hash (un algoritmo hash diferente dará una huella digital diferente). Se muestra esta huella digital previamente calculada (junto con el ascii-art si se proporciona la opción correspondiente) y deberá responder sí o no dependiendo de si reconoce esta huella digital o no (esta huella digital es la imagen / hash de la clave de host pública de la clave servidor). Si dice que sí, se agregará al archivo la clave bublic del servidor (no su huella digital) ~/.ssh/known_hosts.

Podemos notar que ~/.ssh/known_hostses en el directorio a casa (~), debido a que confía en este host (servidor), pero un usuario diferente puede no confiar en lo mismo que usted. Además, la clave pública del host del servidor no depende del usuario, por lo que se almacena en /etc/ssh/.

El segundo comando mostrará la huella digital y el arte ascii de la clave pública recibida del host_server_to_connect (de acuerdo con el algoritmo hash dado en las opciones). Es lo mismo que hacer solo ssh, pero con más opciones visuales, por lo que la conexión continuará de la misma manera que una conexión ssh normal.

Nicolas VERHELST
fuente
No veo nada en la pregunta sobre el arte ASCII; ¿Por qué estás hablando de eso? Por favor no responda en los comentarios; edite  su respuesta para que sea más clara y completa.
Scott
Cuando me haces una pregunta en tu comentario, respondo en el comentario: estoy hablando de ascii-art porque ascii-art es una forma visual "de verificar [la] huella digital del host en Openssh".
Nicolas VERHELST
¿Por qué estás forzando MD5? ¡Use SHA-256, siempre que esté disponible! (De lo contrario, esta es una respuesta útil, OMI).
Martin Prikryl
Yo uso MD5 ya que es suficiente para comparar 'manualmente' las huellas digitales. El uso de MD5 para comparar las huellas digitales no cambiará la forma en que SSH ordena el algoritmo hash preferido para el 'uso de la operación'. Pero sí, estoy de acuerdo en que deberíamos usar SHA-256 cuando esté disponible. (Edité la pregunta para decir que se prefiere sha256).
Nicolas VERHELST