Verifique la huella digital de la clave ECDSA enviada por el host remoto [cerrado]

24

Recibí el conocido mensaje de advertencia cuando intento ingresar a un servidor:

$ ssh whateverhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:10
ECDSA host key for ipofmyhost has changed and you have requested strict checking.
Host key verification failed.

Y sé por qué porque cambié la ip de dicho servidor. Pero si no fuera así, ¿cómo podría verificar la huella digital de la clave ECDSA enviada por el host remoto?

He intentado hacerlo de la siguiente manera:

echo -n ipofthehost | sha256sum

Pero no obtengo la misma huella digital. También probé "hostname, ip" como en aws pero no obtuve ninguna coincidencia.

Si elimino la entrada de mi archivo known_hosts e intento ejecutar ssh nuevamente, se realiza correctamente y dice lo siguiente:

ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxx/xxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

Entonces, ¿a qué se aplica el sha256sum para obtener la huella digital y cómo podría verificarlo?

gugol
fuente
2
Sin un buen valor conocido no puede verificarlo. Solo lo escribe la primera vez que inicia el SSHd y se generan las claves, y se compara con ese buen valor conocido.
Edité tu pregunta. Este sitio acepta solo preguntas sobre un entorno empresarial profesional. Las preguntas sobre redes domésticas no son un tema aquí. Intenté guardar su pregunta con mi edición. Actualmente hay un voto en contra de su pregunta para cerrarla por este motivo.
Peter dice reincorporar a Mónica
@ user186340 Parece cierto que "solo lo escribe la primera vez que inicia el SSHd". Si tiene acceso a la máquina que ejecuta SSHd, puede hacerlo /etc/ssh/ssh_host_ecdsa_key.pubpara obtener la huella digital. Lo acabo de hacer.
jamadagni

Respuestas:

12

Una huella digital de clave pública no es el simple hash de una cadena de IP.

Para recuperar una clave pública de host remoto que puede usar ssh-keyscan <IP>, puede usar las herramientas habituales para extraer su huella digital ( ssh-keygen -lf <public_key_file>).

Finalmente, puede comparar con la huella digital actual en su known_hostsarchivo con ssh-keygen -l -F <domain_or_ip>.

Xavier Lucas
fuente
2
Estoy confundido por qué cuando me conecto a través de SSH y forzo una clave ecdsa por primera vez ( ssh -oHostKeyAlgorithms='ecdsa-sha2-nistp256' [email protected]) me da una huella alfanumérica de 43 dígitos ( ECDSA key fingerprint is SHA256:sBKcTiQ5V.... etc.) pero cuando corro ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pubobtengo un hexadecimal de 32 caracteres.
William Turrell
1
@WilliamTurrell Esto ocurre porque su servidor debe tener una versión anterior (probablemente pre-openSSH 6.8) de ssh-keygen(o su proveedor de servidores no se ha mantenido al día con los tiempos y todavía solo proporciona hash md5 en lugar del nuevo SHA256). Hay soluciones enumeradas aquí: superuser.com/questions/929566
SeldomNeedy
9

Un poco más en detalle : debido a que el mensaje de advertencia se refiere a la huella digital de la clave ECDSA enviada por el host remoto, recopilamos la información sobre la clave pública (ecdsa) del host:

ssh-keyscan -t ecdsa ip_or_hostmane > ecdsa_file_to_compare

Luego podemos averiguar en qué parte de nuestro archivo known_hosts está esa clave pública (ecdsa):

ssh-keygen -l -F ipofhost

Si queremos comparar las huellas dactilares, tenemos que poner el contenido de nuestro archivo known_hosts (solo la entrada relacionada con este host), podemos llamarlo ecdsa_file_from_known_hosts y luego compararlos de la siguiente manera:

ssh-keygen -lf ecdsa_file_to_compare
ssh-keygen -lf ecdsa_file_from_known_hosts

Y verifica si el show tiene el mismo hash.

Por supuesto que no coinciden, es por eso que recibí el mensaje de advertencia (ssh comprueba esta coincidencia internamente). Si estamos seguros sobre el cambio de ip (por lo que no estamos sufriendo un ataque de hombre en el medio), simplemente podemos eliminar la entrada de ese host en nuestro archivo known_hosts y la próxima vez que ingresemos una nueva entrada nueva para se agregará a dicho archivo.

gugol
fuente