Fehlermeldung
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Auch ausgegeben als
- IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
- Offending ED25519 key in /root/.ssh/known_hosts:1
Wird als Block zwischen Zeilen aus `@`-Zeichen ausgegeben, gefolgt vom Fingerabdruck des neuen Schlüssels, der beanstandeten Zeile in known_hosts und „Host key verification failed.“.
OpenSSH client — host key differs from the one recorded in known_hosts
Was der Fehler bedeutet
Der Server hat einen Host-Schlüssel präsentiert, der von dem abweicht, der für diesen Hostnamen oder diese Adresse in `known_hosts` gespeichert ist. ssh kann eine legitime Änderung (Neuinstallation, neuer Rechner hinter derselben IP) nicht davon unterscheiden, dass jemand die Verbindung abfängt; deshalb bricht es im Batch-Modus ab und deaktiviert andernfalls die Authentifizierung per Passwort und per Keyboard-Interactive. Die Zeile „Offending … key in …:N“ zeigt dir, welche Zeile in known_hosts den alten Schlüssel enthält.
Warum der Fehler auftritt
Der Server wurde neu aufgesetzt
häufigEine Neuinstallation, ein erneutes Ausrollen aus einem Image oder ein Container, der beim Start Host-Schlüssel erzeugt, führt zu neuen Host-Schlüsseln unter demselben Namen.
Die Adresse gehört jetzt einem anderen Rechner
häufigCloud-IP-Adressen und DHCP-Leases werden wiederverwendet. Ein Eintrag, der per IP gespeichert wurde, behält den Schlüssel des alten Rechners.
Mehrere Hosts mit unterschiedlichen Schlüsseln hinter einem Namen
gelegentlichRound-Robin-DNS oder ein TCP-Load-Balancer vor Servern, die keine gemeinsamen Host-Schlüssel haben, lässt die Warnung zufällig erscheinen.
Jemand sitzt dazwischen
seltenSelten, aber genau dafür gibt es die Prüfung: ein kompromittiertes Netzwerk, ein bösartiges WLAN oder eine DNS-Übernahme, die mit einem eigenen Schlüssel antwortet. Prüfe, bevor du akzeptierst.
So behebst du den Fehler
- 1.
Neuen Schlüssel prüfen, dann Eintrag ersetzen
Vergleiche den neuen Fingerabdruck mit einem aus einer vertrauenswürdigen Quelle; erst dann entferne die alte Zeile mit `ssh-keygen -R` (für den Namen und für die 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.
SSH-Host-Zertifikate für Serverflotten verwenden
Clients, die einer Host-CA vertrauen, akzeptieren neu aufgesetzte Server, deren neue Schlüssel von der CA signiert sind, ohne Pinning pro 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