Aller au contenu
ecdsa.com
golang.org/x/crypto/ssh/knownhosts (Go)Go

Message d’erreur

ssh: handshake failed: knownhosts: key is unknown

Également affiché sous la forme

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

`*knownhosts.KeyError` possède un champ `Want` : vide pour « key is unknown », non vide pour « key mismatch ». Le message « ssh: must specify HostKeyCallback » signifie que le `ClientConfig` ne prévoit aucune vérification de la clé d’hôte.

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

Ce que cela signifie

La fonction de rappel `knownhosts` n’a trouvé aucune entrée pour cet hôte (et ce port) dans votre fichier known_hosts : elle a donc refusé de faire confiance à la clé présentée par le serveur. C’est l’authentification de l’hôte qui fonctionne comme prévu : sans clé connue, le client ne peut pas distinguer le vrai serveur d’un imposteur. L’erreur « key mismatch » est le cas voisin, plus grave : l’hôte figure dans le fichier, mais avec une clé différente.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

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

    `ssh-keyscan` se contente de récupérer ce que le réseau vous fournit. Comparez l’empreinte avec une source de confiance avant de l’ajouter ; intégrez les entrées vérifiées dans les images ou dans le provisionnement.

    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.

    Utiliser la forme entre crochets pour les ports personnalisés

    knownhosts compare l’hôte et le port exactement comme le fait OpenSSH. `knownhosts.Normalize` et `knownhosts.Line` produisent depuis Go des entrées correctement formatées.

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

Erreurs associées

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