Zum Inhalt springen
ecdsa.com
OpenSSH client (ssh, scp, git over SSH) with StrictHostKeyChecking / BatchModeSSH

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

So behebst du den Fehler

  1. 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. 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. 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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen