Pular para o conteúdo
ecdsa.com
OpenSSH client (ssh, scp, git over SSH) with StrictHostKeyChecking / BatchModeSSH

Mensagem de erro

Host key verification failed.

Também aparece 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.

O Git imprime a mensagem seguida de “fatal: Could not read from remote repository.”. O tipo de chave na linha anterior (`ED25519`, `ECDSA`, `RSA`) é o tipo que o servidor ofereceu.

O que significa

O ssh não conseguiu confirmar que o servidor é quem diz ser e, por isso, abortou antes da autenticação. Ou o host não está no `known_hosts` e o ssh não pôde perguntar a você (modo batch, CI, um comando Git sem terminal), ou ele está listado com outra chave. A linha anterior diz qual é o caso: “No … host key is known for …” para um host desconhecido, um grande aviso “REMOTE HOST IDENTIFICATION HAS CHANGED” para uma chave que mudou.

Por que acontece

Como corrigir

  1. 1.

    Registrar a chave do host depois de verificá-la

    O `ssh-keyscan` mostra o que a rede entrega; compare a impressão digital obtida com a de uma fonte confiável antes de confiar na chave.

    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.

    Fornecer ao CI um known_hosts verificado

    Guarde a linha verificada como segredo ou no repositório. Com `StrictHostKeyChecking no` ou com `ssh-keyscan` em tempo de execução, o job aceita qualquer servidor que responder.

    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 as chaves publicadas pelos serviços de hospedagem Git

    O GitHub, o GitLab e o Bitbucket publicam as impressões digitais das chaves de host deles; o GitHub também as disponibiliza pela 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

Erros relacionados

Ver toda a base de erros de assinatura