web-dev-qa-db-fra.com

Comment le serveur SSH peut-il savoir que la clé privée est incorrecte si la phrase secrète n'a pas encore été fournie?

J'ai un serveur auquel j'accède via SSH. J'autorise uniquement l'authentification à être effectuée avec une clé privée. Normalement, lorsque je me connecte via PuTTY, on me demande d'abord le nom d'utilisateur, puis la phrase secrète pour la clé. Par curiosité, j'ai créé une nouvelle clé privée, qui ne devrait pas être valide pour mon utilisateur et j'ai également mis une phrase secrète dessus. À ma grande surprise, une fois que j'ai fourni le nom d'utilisateur, la clé tentée de se connecter à mon serveur a été refusée avant qu'on me demande la phrase secrète.

Je me demande comment le serveur SSH peut-il savoir que la clé privée est incorrecte si la phrase secrète pour elle n'a pas encore été fournie?

46
vakus

Bien que vous ayez chiffré la clé privée, la clé publique est toujours lisible. authentification SSH avec la méthode " publickey " fonctionne en demandant au client d'envoyer chaque clé publique potentielle au serveur, puis le serveur répond en disant au client quelle clé est autorisée. Si l'une des clés est autorisée, puis le client doit déchiffrer la clé privée pour signer un message, prouvant la propriété de la clé privée.

Dans votre expérience, le serveur a répondu en disant qu'aucune des clés fournies n'était autorisée pour votre nom d'utilisateur, il n'était donc pas nécessaire de déchiffrer une clé privée, l'authentification avait déjà échoué.

83
AndrolGenhald

Pendant la connexion, le client enverra successivement l'empreinte digitale de toutes les clés disponibles au serveur.

Lorsque le serveur signale au client une clé valide trouvée, le client les utilise, puis demande une phrase secrète si nécessaire.

Essayez d'exécuter ssh avec l'option de débogage:

ssh -o LogLevel=DEBUG3 user@dest

chercher des empreintes digitales avec

ssh-keygen -l -f .ssh/id_rsa

Pour vérifier les touches autorisées, ligne par ligne:

while read line;do
    ssh-keygen -l -f <(echo "$line")
  done <.ssh/authorized_keys 
14
F. Hauri