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 FILEetbad permissions. Lancezchmod 600sur le fichier et réessayez. - Vous avez donné le mauvais fichier.
-ydemande la clé privée, pas le fichier.pub. - C'est un fichier
.ppk. Utilisez plutôtputtygen 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.