Risposte:
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 ' -q
al 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" )
ssh-keygen -y -e -f id_rsa
non controlla affatto id_rsa ma restituisce semplicemente il valore da id_rsa.pub. Ad esempio, se si echo 5 > id_rsa
cancella la chiave privata, quindi si fa la diff, la diff passerà! Inoltre, correre ssh-keygen -yef foo
dove 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.
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.
Se sono sul sistema locale, il bastone id_rsa.pub
nella vostra $HOME/.ssh/authorized_keys
e ssh
per localhost
usare la id_rsa
chiave. Se funziona, allora corrispondono.
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
ssh -v
aiuta anche molto.