Come verificare se una coppia di chiavi pubblica / privata RSA corrisponde


72

Ho due file id_rsae id_rsa.pub. Quale comando può essere utilizzato per convalidare se sono una coppia valida ?


Confermo la risposta di Michuelnik; mi ha evitato di dover creare una nuova coppia di chiavi, grazie. ssh -vaiuta anche molto.
Chris K,

Risposte:


93

Preferirei la ssh-keygen -y -e -f <private key>strada invece della risposta accettata di Come testare una coppia di chiavi DSA pubblica / privata? su Stack Overflow.

ssh-keygen -y -e -f <private key>prende una chiave privata e stampa la chiave pubblica corrispondente che può essere confrontata direttamente con le chiavi pubbliche disponibili. (Suggerimento: attenzione ai commenti o alle opzioni chiave.)

(Come diavolo sta facendo? Posso solo sperare che la chiave pubblica sia codificata direttamente o indirettamente nella chiave privata ...)

Ne avevo bisogno anch'io e ho usato il seguente one-liner Bash. Non dovrebbe generare nulla se le chiavi si uniscono. Applicare un po ' -qal diff negli script e diff imposta solo il codice di ritorno in modo appropriato.

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

1
@MichaelHampton: ora capisco il tuo commento. "la risposta accettata" dovrebbe fare riferimento alla domanda su StackOverflow non a questa domanda ...
Michuelnik,

1
@Sirch: ho pensato che la decisione su quale chiave fosse privata e su quale pubblica fosse assolutamente casuale poiché le due chiavi sono uguali. Ciò che una chiave crittografa può essere decrittografato solo con l'altra. E se una chiave potesse essere ottenuta dall'altra, tutto ciò non funzionerebbe.
Michuelnik,

1
@Michuelnik È possibile derivare la chiave pubblica dalla chiave privata. Non è possibile derivare la chiave privata dalla chiave pubblica. Non stavano parlando del materiale che crittografa.
Sirch,

1
@Michuelnik imho, la domanda è fuori tema su SO e su argomento qui (e / o Superuser). imho, non dovrebbe essere contrassegnato come duplicato e invece contrassegnato lì per la migrazione. Ma è coperto da entrambi, quindi mi piace la condivisione più completa delle informazioni.
Chris K,

10
Finché esiste id_rsa.pub, ssh-keygen -y -e -f id_rsanon controlla affatto id_rsa ma restituisce semplicemente il valore da id_rsa.pub. Ad esempio, se si echo 5 > id_rsacancella la chiave privata, quindi si fa la diff, la diff passerà! Inoltre, correre ssh-keygen -yef foodove foo non è una chiave valida (e non ha foo.pub corrispondente) bloccherà l'attesa per l'input dell'utente, quindi fai attenzione usando questo in uno script.

32

A seconda di dove si ottiene il file della chiave pubblica che si sta testando, la risposta accettata può dare risultati falsi positivi. Ciò è dovuto al comportamento descritto nel commento di @drewbenn. In particolare, quando l'opzione -e viene utilizzata con il file della chiave privata come parametro dell'opzione -f, semplicemente pappagalli (ma riformatta) ciò che è nel file della chiave pubblica associato.

In altre parole,

ssh-keygen -y -f id_rsa

(apparentemente) genera il valore della chiave pubblica e

ssh-keygen -y -e -f id_rsa

semplicemente e restituisce (e riformatta) la chiave nell'id_rsa.pub esistente, qualunque essa sia .

Nel mio caso, devo verificare che la coppia non sia stata danneggiata. Quindi, ho deciso di confrontare quanto segue:

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

con

cut -d' ' -f 2 id_rsa.pub

Perciò:

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

Forse questo non è così flessibile, ma è meglio per le mie esigenze. Forse aiuta qualcun altro.


5
Questo dovrebbe davvero sostituire la risposta accettata o almeno superarla in termini di voti.
Thomanski,

Grazie! Questo comando non funziona con le chiavi con una passphrase, non lo richiede interattivamente. Ho estratto i due () contenuti del comando in file e li ho diffusi, che funziona.
Yaroslav Nikitenko,

5

Se sono sul sistema locale, il bastone id_rsa.pubnella vostra $HOME/.ssh/authorized_keyse sshper localhostusare la id_rsachiave. Se funziona, allora corrispondono.

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.