Fehlermeldung
Host key verification failed.
Auch ausgegeben als
- No ED25519 host key is known for 127.0.0.1 and you have requested strict checking.
- fatal: Could not read from remote repository.
Git gibt danach „fatal: Could not read from remote repository.“ aus. Der Schlüsseltyp in der Zeile davor (`ED25519`, `ECDSA`, `RSA`) ist der Typ, den der Server angeboten hat.
Was der Fehler bedeutet
ssh konnte nicht bestätigen, dass der Server der ist, der er zu sein vorgibt, und hat deshalb vor der Authentifizierung abgebrochen. Entweder steht der Host nicht in `known_hosts` und ssh konnte dich nicht fragen (Batch-Modus, CI, ein Git-Befehl ohne Terminal), oder er ist mit einem anderen Schlüssel eingetragen. Die Zeile davor zeigt, welcher Fall vorliegt: „No … host key is known for …“ bei einem unbekannten Host, eine große Warnung „REMOTE HOST IDENTIFICATION HAS CHANGED“ bei einem geänderten.
Warum der Fehler auftritt
Erste Verbindung ohne Terminal
häufigCI-Runner, Cronjobs, Docker-Builds und `git` in Skripten starten mit einer leeren Datei `known_hosts`. Mit `BatchMode yes` oder ohne TTY kann ssh die Rückfrage zur Bestätigung nicht anzeigen und bricht ab.
Der Schlüssel des Hosts weicht vom gespeicherten ab
häufigServer neu installiert, IP-Adresse von einem anderen Rechner wiederverwendet, Load Balancer vor Hosts mit unterschiedlichen Schlüsseln – oder die Verbindung wird abgefangen. Siehe den Eintrag „REMOTE HOST IDENTIFICATION HAS CHANGED“.
Die known_hosts-Datei ist nicht die, die du meinst
gelegentlichEin anderes `HOME` in der CI oder unter sudo, ein `UserKnownHostsFile`, das woandershin zeigt, oder eine Datei, die einem anderen Benutzer gehört und die ssh nicht lesen oder schreiben kann.
So behebst du den Fehler
- 1.
Host-Schlüssel erst nach der Prüfung eintragen
`ssh-keyscan` zeigt, was dir das Netzwerk liefert; vergleiche den Fingerabdruck mit einem aus einer vertrauenswürdigen Quelle, bevor du ihm vertraust.
bash # Store the server's host key once, after checking its fingerprint out of band. ssh-keyscan -t ed25519 server.example.com > /tmp/hostkey ssh-keygen -lf /tmp/hostkey # compare with the fingerprint from your provider/console cat /tmp/hostkey >> ~/.ssh/known_hosts - 2.
Geprüfte known_hosts-Datei in die CI mitliefern
Speichere die geprüfte Zeile als Secret oder im Repository. Mit `StrictHostKeyChecking no` oder `ssh-keyscan` zur Laufzeit akzeptiert der Job alles, was gerade antwortet.
yaml # GitHub Actions: put the verified known_hosts line into a secret, not ssh-keyscan at run time - name: Configure SSH run: | install -d -m 700 ~/.ssh echo "${{ secrets.DEPLOY_KNOWN_HOSTS }}" > ~/.ssh/known_hosts chmod 600 ~/.ssh/known_hosts - 3.
Veröffentlichte Schlüssel der Git-Hoster verwenden
GitHub, GitLab und Bitbucket veröffentlichen die Fingerabdrücke ihrer Host-Schlüssel; GitHub zusätzlich über seine Meta-API.
bash # GitHub publishes its SSH host keys (also at https://api.github.com/meta, "ssh_keys") curl -s https://api.github.com/meta | jq -r '.ssh_keys[] | "github.com " + .' >> ~/.ssh/known_hosts