Comment retrouver une clé publique SSH à partir de la clé privée

Lancez ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub. Cette commande lit la clé privée et affiche la clé publique correspondante : un fichier .pub perdu peut donc toujours être reconstruit. Si la clé a une phrase secrète, vous devez la saisir. L'inverse est impossible : on ne peut pas obtenir une clé privée à partir d'une clé publique.

Mis à jour le . Commandes lancées avec OpenSSH 10.0 sous Debian 13, avec des clés ed25519 et RSA, avec et sans phrase secrète.

La commande

ssh-keygen -y -f ~/.ssh/id_ed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINH9eelf0P7eT5ue6SualUXFrh1c9p3Maaem93iZtC2Q you@laptop

Elle affiche la clé à l'écran. Pour la remettre dans son fichier, redirigez la sortie :

ssh-keygen -y -f ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.pub

La même commande fonctionne avec une clé .pem téléchargée chez un fournisseur cloud, comme une paire de clés AWS : ssh-keygen -y -f key.pem.

Pour remettre la clé sur un serveur, voyez comment fonctionne authorized_keys.

Ce qui peut mal tourner

  • Vous avez oublié la phrase secrète. Vous obtenez Load key "id_ed25519": incorrect passphrase supplied to decrypt private key. Il n'y a aucun moyen de contourner cela sans la phrase secrète. Créez une nouvelle clé.
  • Le fichier est lisible par d'autres. Vous obtenez UNPROTECTED PRIVATE KEY FILE et bad permissions. Lancez chmod 600 sur le fichier et réessayez.
  • Vous avez donné le mauvais fichier. -y demande la clé privée, pas le fichier .pub.
  • C'est un fichier .ppk. Utilisez plutôt puttygen key.ppk -L, ou convertissez-le d'abord.

Le commentaire peut manquer

Le nouveau format d'OpenSSH stocke le commentaire à l'intérieur de la clé privée : il revient donc dans la sortie. Une clé au format ancien, dont la première ligne est BEGIN RSA PRIVATE KEY, n'en a pas, et vous n'obtenez que le type et la clé. Cela fonctionne tout aussi bien. Ajoutez un commentaire à la main en fin de ligne si vous en voulez un.

Vérifier qu'un fichier .pub correspond à une clé privée

ssh-keygen -lf n'est pas un contrôle fiable pour cela. Avec une clé privée ayant un fichier .pub à côté, il lit le fichier .pub : il affiche donc la mauvaise empreinte si les deux ne vont pas ensemble. Nous l'avons confirmé avec une paire qui ne correspondait pas. Comparez plutôt les vraies clés :

diff <(ssh-keygen -y -f ~/.ssh/id_ed25519 | cut -d' ' -f1,2) <(cut -d' ' -f1,2 ~/.ssh/id_ed25519.pub) && echo same

Cela fonctionne dans bash et zsh. La commande affiche same quand elles correspondent et montre la différence sinon. Le cut exclut le commentaire de la comparaison.

Questions

Peut-on retrouver la clé privée à partir de la clé publique ?

Non. La clé publique est calculée à partir de la clé privée, et le calcul ne s'inverse pas. Si la clé privée est perdue, générez une nouvelle paire.

Pourquoi ssh-keygen -y demande-t-il une phrase de passe ?

La clé privée est chiffrée avec elle, et ssh-keygen doit la déchiffrer pour calculer la partie publique. Sans la phrase de passe, impossible de l'obtenir.

Le commentaire à la fin de la ligne .pub compte-t-il ?

Non. C'est une simple étiquette, par exemple you@laptop. Les serveurs l'ignorent, donc une clé publique sans commentaire fonctionne de la même façon.

Sources

Autres guides : Clés et connexion

Tous les guides