Aller au contenu
ecdsa.com
OpenSSH client (ssh, scp, git over SSH) with StrictHostKeyChecking / BatchModeSSH

Message d’erreur

Host key verification failed.

Également affiché sous la forme

  • 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 l’affiche suivi de « fatal: Could not read from remote repository. ». Le type de clé de la ligne précédente (`ED25519`, `ECDSA`, `RSA`) est celui que le serveur a proposé.

Ce que cela signifie

ssh n’a pas pu confirmer que le serveur est bien celui qu’il prétend être : il a donc abandonné avant l’authentification. Soit l’hôte ne figure pas dans `known_hosts` et ssh n’a pas pu vous demander confirmation (mode batch, CI, commande Git sans terminal), soit il y figure avec une clé différente. La ligne qui précède indique de quel cas il s’agit : « No … host key is known for … » pour un hôte inconnu, un grand avertissement « REMOTE HOST IDENTIFICATION HAS CHANGED » pour un hôte dont la clé a changé.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Enregistrer la clé d’hôte après l’avoir vérifiée

    `ssh-keyscan` montre ce que le réseau vous fournit ; comparez son empreinte avec celle d’une source fiable avant de lui faire confiance.

    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.

    Fournir à la CI un known_hosts vérifié

    Stockez la ligne vérifiée comme secret ou dans le dépôt. `StrictHostKeyChecking no` ou `ssh-keyscan` au moment de l’exécution font accepter au job n’importe quel serveur qui répond.

    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.

    Utiliser les clés publiées par les hébergeurs Git

    GitHub, GitLab et Bitbucket publient les empreintes de leurs clés d’hôte ; GitHub les fournit aussi via son API meta.

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature