Cómo corregir: ADVERTENCIA: LA IDENTIFICACIÓN DEL HOST REMOTO HA CAMBIADO en Mac y Linux

SSH, o Secure Shell, es una forma muy común de acceder de forma segura a máquinas remotas, normalmente a través de la línea de comandos. Su objetivo es garantizar que su conexión y el...

SSH, o Secure Shell, es una forma muy común de acceder de forma segura a máquinas remotas, normalmente a través de la línea de comandos. Su objetivo es garantizar que su conexión y, por lo tanto, todos los datos transmitidos estén libres de escuchas. Debido a esto, existen bastantes comprobaciones integradas en los populares clientes SSH, como OpenSSH, que garantizan que su conexión no se vea comprometida.

Un ejemplo de una de estas comprobaciones es la siguiente, que identifica cuando ha cambiado la huella digital de un servidor:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ ssh [correo electrónico protegido]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I.
Please contact your system administrator.
Add correct host key in /Users/scott/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/scott/.ssh/known_hosts:47
ECDSA host key for ec2-192-168-1-1.compute-1.amazonaws.com has changed and you have requested strict checking.
Host key verification failed.

Cuando se conecta a un servidor a través de SSH, obtiene una huella digital para la clave ECDSA, que luego guarda en su directorio de inicio en ~/.ssh/ hosts_conocidos. Esto se hace después de conectarse por primera vez al servidor y le mostrará un mensaje como este:

1
2
3
4
$ ssh [correo electrónico protegido]
The authenticity of host 'ec2-192-168-1-1.compute-1.amazonaws.com (192.168.1.1)' can't be established.
ECDSA key fingerprint is SHA256:hotsxb/qVi1/ycUU2wXF6mfGH++Yk7WYZv0r+tIhg4I.
Are you sure you want to continue connecting (yes/no)? 

Si ingresa 'yes', la huella digital se guarda en el archivo known_hosts, que luego SSH consulta cada vez que se conecta a ese servidor.

Pero, ¿qué sucede si la clave ECDSA de un servidor ha cambiado desde la última vez que se conectó a él? Esto es alarmante porque en realidad podría significar que te estás conectando a un servidor diferente sin saberlo. Si este nuevo servidor es malicioso, podría ver todos los datos enviados hacia y desde su conexión, que podrían ser utilizados por quien haya configurado el servidor. Esto se llama ataque de hombre en el medio. Este escenario es exactamente lo que el mensaje "ADVERTENCIA: ¡LA IDENTIFICACIÓN DEL HOST REMOTO HA CAMBIADO!" intenta advertirle.

Por supuesto, este no es siempre el caso, y hay muchas razones para que la huella digital de la clave ECDSA cambie para un servidor. En mi caso, tenía una dirección IP elástica en AWS y la asigné a un servidor diferente después de volver a implementar nuestra aplicación. La dirección IP y el nombre de host al que me estaba conectando eran los mismos, pero el servidor subyacente era diferente, lo que provocó que el cliente SSH emitiera esta advertencia.

Solucionar el problema

Si está 100 % seguro de que este era el comportamiento esperado y de que no hay ningún problema de seguridad potencial, deberá solucionar el problema antes de continuar.

Las formas más fáciles que he encontrado para solucionar este problema son las siguientes dos soluciones.

Resolver manualmente a través de hosts_conocidos {#resolvemanualmente a través de hosts_conocidos}

  • En el mensaje de advertencia, busque la línea que le indica dónde se encuentra la clave ECDSA infractora en el archivo known_hosts. En mi ejemplo, esta línea decía "Clave ECDSA infractora en /Users/scott/.ssh/known_hosts:47", que hace referencia a la línea 47.
  • Abra el archivo known_hosts especificado en el mensaje de advertencia
  • Eliminar la línea especificada en el mensaje de advertencia

Al eliminar esta línea, su cliente SSH no tendrá una huella digital de clave ECDSA para comparar y, por lo tanto, le pedirá nuevamente que verifique la autenticidad del servidor la próxima vez que se conecte. Una vez hecho esto, tendrá una nueva huella digital en nuestro archivo known_hosts para este servidor, y la advertencia desaparecerá.

Resolver usando ssh-keygen

Otra solución sería utilizar la utilidad ssh-keygen para eliminar la clave infractora de su archivo known_hosts, lo que se puede hacer con el siguiente comando :

1
$ ssh-keygen -R [hostname-or-IP]

Entonces, en mi ejemplo, lo usaría así:

1
$ ssh-keygen -R ec2-192-168-1-1.compute-1.amazonaws.com

Este método es bueno si no desea modificar manualmente el archivo known_hosts usted mismo, y la utilidad es más fácil de usar si tiene varios nombres de host y direcciones IP para corregir. También puede manejar nombres de host con hash en un archivo known_hosts.old.