Mensaje de error
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
También se muestra como
- IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
- Offending ED25519 key in /root/.ssh/known_hosts:1
Se imprime como un bloque entre líneas de caracteres `@`, seguido de la huella digital de la nueva clave, la línea problemática de known_hosts y «Host key verification failed.».
OpenSSH client — host key differs from the one recorded in known_hosts
Qué significa
El servidor presentó una clave de host distinta de la registrada en `known_hosts` para este nombre de host o esta dirección. ssh no puede distinguir un cambio legítimo (una reinstalación, una máquina nueva detrás de la misma IP) de alguien que intercepta la conexión, así que se niega a continuar en modo por lotes y, en los demás casos, desactiva la autenticación por contraseña y la de tipo keyboard-interactive. La línea «Offending … key in …:N» indica qué línea de known_hosts contiene la clave antigua.
Por qué ocurre
El servidor se reconstruyó
frecuenteUna reinstalación, un nuevo despliegue a partir de una imagen o un contenedor que genera las claves de host al arrancar crea claves de host nuevas con el mismo nombre.
La dirección ahora pertenece a otra máquina
frecuenteLas direcciones IP de la nube y las concesiones de DHCP se reciclan. Una entrada registrada por IP conserva la clave de la máquina anterior.
Varios hosts con claves distintas detrás de un mismo nombre
ocasionalUn DNS round-robin o un balanceador de carga TCP situado delante de servidores que no comparten claves de host hace que la advertencia aparezca de forma aleatoria.
Hay alguien en medio de la conexión
raraEs raro, pero es justo para lo que existe la comprobación: una red comprometida, una red Wi-Fi maliciosa o un secuestro de DNS que responde con su propia clave. Verifica antes de aceptar.
Cómo solucionarlo
- 1.
Verificar la nueva clave y después sustituir la entrada
Compara la nueva huella digital con una procedente de una fuente de confianza; solo entonces elimina la línea antigua con `ssh-keygen -R` (por nombre y por IP).
bash # 1. Get the new fingerprint from a trusted channel (cloud console, provisioning logs, the admin) ssh-keyscan -t ed25519 server.example.com 2>/dev/null | ssh-keygen -lf - # 2. Only if it matches: remove the old entry and connect again ssh-keygen -R server.example.com ssh-keygen -R 203.0.113.10 - 2.
Usar certificados de host SSH para flotas de servidores
Los clientes que confían en una CA de hosts aceptan los servidores reconstruidos cuyas nuevas claves están firmadas por esa CA, sin fijación por host.
text # known_hosts: trust host keys signed by your SSH CA instead of pinning each key @cert-authority *.internal.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... ssh-host-ca