Saltar al contenido
ecdsa.com
OpenSSH client (ssh, scp, git over SSH) with StrictHostKeyChecking / BatchModeSSH

Mensaje de error

Host key verification failed.

También se muestra como

  • 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 lo imprime seguido de «fatal: Could not read from remote repository.». El tipo de clave de la línea anterior (`ED25519`, `ECDSA`, `RSA`) es el tipo que ofreció el servidor.

Qué significa

ssh no pudo confirmar que el servidor es quien dice ser, así que abortó antes de la autenticación. O bien el host no está en `known_hosts` y ssh no pudo preguntarte (modo por lotes, CI, un comando de Git sin terminal), o bien figura con otra clave. La línea anterior indica cuál de los dos casos es: «No … host key is known for …» para un host desconocido, y una gran advertencia «REMOTE HOST IDENTIFICATION HAS CHANGED» para uno que cambió.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Registrar la clave del host después de verificarla

    `ssh-keyscan` muestra lo que te da la red; compara su huella digital con una procedente de una fuente de confianza antes de confiar en ella.

    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.

    Proporcionar a la CI un known_hosts verificado

    Guarda la línea verificada como secreto o en el repositorio. `StrictHostKeyChecking no` o `ssh-keyscan` en tiempo de ejecución hacen que el trabajo acepte cualquier cosa que responda.

    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.

    Usar las claves publicadas por los proveedores de alojamiento Git

    GitHub, GitLab y Bitbucket publican las huellas digitales de sus claves de host; GitHub, también a través de su 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

Errores relacionados

Explorar toda la base de datos de errores de firma