web-dev-qa-db-fra.com

Comment vérifier si une paire de clés publique / privée RSA correspond

J'ai deux fichiers, id_rsa et id_rsa.pub. Quelle commande peut être utilisée pour valider s'il s'agit d'une paire valide?

86
Ryan

Je préfère le ssh-keygen -y -e -f <private key> manière au lieu de la réponse acceptée de Comment testez-vous une paire de clés DSA publique/privée? sur Stack Overflow.

ssh-keygen -y -e -f <private key> prend une clé privée et imprime la clé publique correspondante qui peut être directement comparée à 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 est encodée directement ou indirectement dans la clé privée ...)

J'en avais besoin moi-même et j'ai utilisé la doublure Bash suivante. Il ne devrait rien produire si les clés appartiennent ensemble. Appliquez un peu -q au diff dans les scripts et diff définit uniquement le code de retour de manière appropriée.

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )
107
Michuelnik

Selon l'endroit où vous obtenez le fichier de clé publique que vous testez, la réponse acceptée peut donner des résultats faussement 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 perruque simplement (mais reformate) ce qui se trouve dans le 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 sort (et reformate) la clé dans le existant id_rsa.pub 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 les éléments suivants:

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

avec

cut -d' ' -f 2 id_rsa.pub

Donc:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

Ce n'est peut-être pas aussi flexible, mais c'est mieux pour mes besoins. Peut-être que cela aide quelqu'un d'autre.

41
twildfarmer

S'ils sont sur votre système local, collez id_rsa.pub dans ton $HOME/.ssh/authorized_keys et ssh à localhost à l'aide de id_rsa clé. Si cela fonctionne, alors ils correspondent.

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
6
Michael Hampton