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?
ssh
fingerprint
gugol
fuente
fuente
/etc/ssh/ssh_host_ecdsa_key.pub
para obtener la huella digital. Lo acabo de hacer.Respuestas:
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_hosts
archivo conssh-keygen -l -F <domain_or_ip>
.fuente
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 corrossh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
obtengo un hexadecimal de 32 caracteres.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/929566Un 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:
Luego podemos averiguar en qué parte de nuestro archivo known_hosts está esa clave pública (ecdsa):
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:
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.
fuente