Pular para o conteúdo
ecdsa.com
golang.org/x/crypto/ssh/knownhosts (Go)Go

Mensagem de erro

ssh: handshake failed: knownhosts: key is unknown

Também aparece como

  • ssh: handshake failed: knownhosts: key mismatch
  • ssh: must specify HostKeyCallback

O `*knownhosts.KeyError` tem um campo `Want`: vazio em “key is unknown” e preenchido em “key mismatch”. “ssh: must specify HostKeyCallback” significa que o `ClientConfig` não tem nenhuma verificação de chave de host.

golang.org/x/crypto/ssh/knownhosts (Go) — *knownhosts.KeyError from the HostKeyCallback

O que significa

O callback `knownhosts` não encontrou nenhuma entrada para este host (e porta) no seu arquivo known_hosts, então se recusou a confiar na chave que o servidor apresentou. É a autenticação do host funcionando: sem uma chave conhecida, o cliente não consegue distinguir o servidor real de um impostor. “key mismatch” é o caso irmão mais grave — o host está listado, mas com outra chave.

Por que acontece

Como corrigir

  1. 1.

    Adicionar a chave do host depois de verificá-la

    O `ssh-keyscan` só obtém o que a rede entrega. Compare a impressão digital com uma fonte confiável antes de adicioná-la; incorpore as entradas verificadas às imagens ou ao provisionamento.

    bash
    # Fetch the host key, then compare its fingerprint with one obtained out of band
    # (cloud console, provisioning output, the server's /etc/ssh/*.pub).
    ssh-keyscan -t ed25519 -p 22 server.example.com > /tmp/hostkey
    ssh-keygen -lf /tmp/hostkey
    cat /tmp/hostkey >> ~/.ssh/known_hosts      # only after the fingerprints match
  2. 2.

    Usar a forma entre colchetes para portas personalizadas

    O knownhosts compara o host e a porta exatamente como o OpenSSH faz. `knownhosts.Normalize` e `knownhosts.Line` geram, a partir do Go, entradas no formato correto.

    text
    # known_hosts entry for a non-default port: brackets and the port are part of the name
    [server.example.com]:2222 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...

Erros relacionados

Ver toda a base de erros de assinatura