ssh-keygen -y -e -f <private key>prend une clé privée et imprime la clé publique correspondante qui peut être comparée directement à vos clés publiques disponibles. (Astuce: méfiez-vous des commentaires ou des options-clés.)
(Comment diable fait-il cela? Je ne peux qu'espérer que la clé publique soit codée directement ou indirectement dans la clé privée ...)
J'en avais besoin moi-même et utilisais le one-liner Bash suivant. Il ne doit rien sortir si les clés vont ensemble. Appliquez un peu -qà la diff dans les scripts et diff seulement définit le code de retour de manière appropriée.
@ MichaelHampton: maintenant je comprends votre commentaire. "La réponse acceptée" devrait faire référence à la question sur stackoverflow pas cette question ...
Michuelnik
1
@Sirch: Je pensais que la décision qui est la clé privée et celle qui est publique est purement aléatoire puisque les deux clés sont égales. Ce que l'une des clés crypte ne peut être déchiffré qu'avec l'autre. Et si une clé pouvait être obtenue de l'autre, tout ne fonctionnerait pas.
Michuelnik
1
@Michuelnik Vous pouvez dériver la clé publique de la clé privée. Vous ne pouvez pas dériver la clé privée de la clé publique. Ne parlaient pas du matériel qu'il chiffre.
Sirch
1
@ Michèlenik à mon humble avis, la question est hors sujet sur SO et sur sujet ici (et / ou superutilisateur). À mon humble avis, il ne devrait pas être marqué en tant que doublon, mais signalé ici pour migration. Mais c'est couvert sur les deux donc j'aime le partage plus complet de l'information.
Chris K
10
Tant que id_rsa.pub existe, ssh-keygen -y -e -f id_rsane vérifie absolument pas id_rsa mais renvoie simplement la valeur de id_rsa.pub. Donc, par exemple, si vous echo 5 > id_rsaeffacez la clé privée, faites le diff, le diff passera! En outre, ssh-keygen -yef foosi foo n'est pas une clé valide (et n'a pas de fichier foo.pub correspondant), l'attente de la saisie par l'utilisateur sera bloquée. Soyez donc prudent si vous utilisez ceci dans un script.
32
Selon la source où vous obtenez le fichier de clé publique que vous testez, la réponse acceptée peut donner des résultats faux positifs. Cela est dû au comportement décrit dans le commentaire de @drewbenn. Plus précisément, lorsque l'option -e est utilisée avec le fichier de clé privée en tant que paramètre d'option -f, elle ne fait que perroquets (mais reformate) le contenu du fichier de clé publique associé.
En d'autres termes,
ssh-keygen -y -f id_rsa
(apparemment) génère la valeur de la clé publique, et
ssh-keygen -y -e -f id_rsa
simplement et affiche (et reformate) la clé dans le fichier id_rsa.pub existant, quel qu’il soit .
Dans mon cas, je dois vérifier que la paire n'a pas été corrompue. J'ai donc décidé de comparer ce qui suit:
Cela devrait remplacer la réponse acceptée ou au moins la surpasser.
thomanski
Je vous remercie! Cette commande ne fonctionne pas avec les clés avec une phrase secrète, elle ne demande pas cela de manière interactive. J'ai extrait le contenu de la commande two () dans des fichiers et les ai différenciés, cela fonctionne.
Yaroslav Nikitenko
5
S'ils sont sur votre système local, le bâton id_rsa.pubdans votre $HOME/.ssh/authorized_keyset sshà l' localhostaide de la id_rsaclé. Si cela fonctionne, alors ils correspondent.
ssh -v
aide beaucoup aussi.Réponses:
Je préférerais le
ssh-keygen -y -e -f <private key>
chemin à la place de la réponse acceptée de Comment tester une paire de clés DSA publique / privée? débordement de pile.ssh-keygen -y -e -f <private key>
prend une clé privée et imprime la clé publique correspondante qui peut être comparée directement à vos clés publiques disponibles. (Astuce: méfiez-vous des commentaires ou des options-clés.)(Comment diable fait-il cela? Je ne peux qu'espérer que la clé publique soit codée directement ou indirectement dans la clé privée ...)
J'en avais besoin moi-même et utilisais le one-liner Bash suivant. Il ne doit rien sortir si les clés vont ensemble. Appliquez un peu
-q
à la diff dans les scripts et diff seulement définit le code de retour de manière appropriée.la source
ssh-keygen -y -e -f id_rsa
ne vérifie absolument pas id_rsa mais renvoie simplement la valeur de id_rsa.pub. Donc, par exemple, si vousecho 5 > id_rsa
effacez la clé privée, faites le diff, le diff passera! En outre,ssh-keygen -yef foo
si foo n'est pas une clé valide (et n'a pas de fichier foo.pub correspondant), l'attente de la saisie par l'utilisateur sera bloquée. Soyez donc prudent si vous utilisez ceci dans un script.Selon la source où vous obtenez le fichier de clé publique que vous testez, la réponse acceptée peut donner des résultats faux positifs. Cela est dû au comportement décrit dans le commentaire de @drewbenn. Plus précisément, lorsque l'option -e est utilisée avec le fichier de clé privée en tant que paramètre d'option -f, elle ne fait que perroquets (mais reformate) le contenu du fichier de clé publique associé.
En d'autres termes,
(apparemment) génère la valeur de la clé publique, et
simplement et affiche (et reformate) la clé dans le fichier id_rsa.pub existant, quel qu’il soit .
Dans mon cas, je dois vérifier que la paire n'a pas été corrompue. J'ai donc décidé de comparer ce qui suit:
avec
Donc:
Ce n’est peut-être pas aussi flexible, mais c’est mieux pour mes besoins. Peut-être que cela aide quelqu'un d'autre.
la source
S'ils sont sur votre système local, le bâton
id_rsa.pub
dans votre$HOME/.ssh/authorized_keys
etssh
à l'localhost
aide de laid_rsa
clé. Si cela fonctionne, alors ils correspondent.la source