SSH, o Secure Shell, es una forma muy común de acceder de forma segura a máquinas remotas, generalmente 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, hay bastantes comprobaciones integradas en los clientes SSH populares, como OpenSSH, que aseguran que su conexión no se vea comprometida.
Te puede interesar:Cómo Docker puede facilitarle la vida como desarrolladorUn ejemplo de una de estas comprobaciones es la siguiente, que identifica cuándo ha cambiado la huella digital de un servidor:
Te puede interesar:Usar variables globales en Node.js$ ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 el ECDSA clave, que luego guarda en su directorio de inicio bajo ~/.ssh/known_hosts
. Esto se hace después de conectarse por primera vez al servidor y le mostrará un mensaje como este:
$ ssh [email protected]
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 ‘sí’, la huella digital se guarda en el known_hosts
, que SSH luego 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 se está conectando a un servidor diferente sin saberlo. Si este nuevo servidor es malicioso, entonces podrá 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 man-in-the-middle. Este escenario es exactamente lo que la «ADVERTENCIA: ¡LA IDENTIFICACIÓN DEL HOST REMOTO HA CAMBIADO!» mensaje está tratando de advertirle sobre.
Te puede interesar:Leer un archivo línea por línea en Node.jsPor 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 asignaba 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, que es lo que hizo que el cliente SSH emitiera esta advertencia.
Te puede interesar:Teoría de la computación: máquinas de estados finitosSolucionar el problema
Contenido
Si está 100% seguro de que se trataba de un comportamiento esperado y de que no hay ningún problema de seguridad potencial, deberá solucionar el problema antes de continuar.
Te puede interesar:Cómo arreglar «ADVERTENCIA: ARCHIVO DE CLAVE PRIVADA NO PROTEGIDO!» en Mac y LinuxLas formas más fáciles que he encontrado para solucionar este problema son las siguientes dos soluciones.
Resolver manualmente a través de known_hosts
- En el mensaje de advertencia, busque la línea que le indica dónde se encuentra la clave ECDSA infractora en el
known_hosts
archivo. En mi ejemplo, esta línea decía «Clave ECDSA ofensiva en /Users/scott/.ssh/known_hosts:47», que se refiere a la línea 47. - Abre el
known_hosts
archivo 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 known_hosts
para este servidor y la advertencia desaparecerá.
Resolver usando ssh-keygen
Otra solución sería utilizar el ssh-keygen utilidad para eliminar la clave infractora de su known_hosts
archivo, que se puede hacer con el siguiente comando:
$ ssh-keygen -R [hostname-or-IP]
Entonces, en mi ejemplo, lo usaría así:
$ ssh-keygen -R ec2-192-168-1-1.compute-1.amazonaws.com
Este método es bueno si no desea modificar manualmente el known_hosts
archivo 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 hash en un known_hosts.old
archivo.