Ho perso l'accesso al mio ~/.ssh/id_dsa
file (file della chiave privata OpenSSH nell'algoritmo DSA), a causa dell'oblio della passphrase.
Ma, in origine, l'ho fatto importare gpg-agent
e protetto con una passphrase di agente gpg, che conosco. E la chiave privata funziona ancora bene gpg-agent
anche ora, anche se ora desidero ricostruire il file della chiave privata OpenSSH usando ciò che è archiviato gpg-agent
.
Utilizzando lo gpg-connect-agent
strumento, con la seguente sequenza di comandi, penso di essere in grado di estrarre la chiave privata (in formato hex / ascii), anche se non so come ricostruirla nel formato di file della chiave privata OpenSSH originale:
- Inizia
gpg-connect-agent
con l'--hex
opzione. - Nel
>
prompt, ottieni l'ID esadecimale della chiave usando ilkeyinfo --ssh-list
comando (per essere precisi è il terzo campo che fornisce l'ID esadecimale della chiave). - Nel
>
prompt, eseguirekeywrap_key --export
. - Nel
>
prompt, eseguireexport_key <enter hex ID from step 2>
oexport_key --openpgp <enter hex ID from step 2>
.
Ora, dopo aver richiesto la passphrase, averla ricevuta e confermata, lo gpg-connect-agent
strumento visualizza alcune decine di righe di codici hex e ascii, che sospetto fortemente essere la mia chiave privata ssh importata originale.
Quindi, mostra OK
, implicando sicuramente che l'operazione è andata a buon fine.
Supponendo che ciò che viene visualizzato sia effettivamente la mia chiave privata ssh (come da "help export_key", ciò che è stato scaricato sullo schermo è la versione crittografata della chiave aeswrap-128; molto probabilmente crittografata con la mia passphrase di agente gpg noto), qualche aiuto su come convertire queste informazioni nel tradizionale formato di chiave privata ssh sarebbe molto apprezzato (un programma perl / python / shell / C per farlo sarebbe un bonus!).