Ho perso l'accesso al mio ~/.ssh/id_dsafile (file della chiave privata OpenSSH nell'algoritmo DSA), a causa dell'oblio della passphrase.
Ma, in origine, l'ho fatto importare gpg-agente protetto con una passphrase di agente gpg, che conosco. E la chiave privata funziona ancora bene gpg-agentanche ora, anche se ora desidero ricostruire il file della chiave privata OpenSSH usando ciò che è archiviato gpg-agent.
Utilizzando lo gpg-connect-agentstrumento, 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-agentcon l'--hexopzione. - Nel
>prompt, ottieni l'ID esadecimale della chiave usando ilkeyinfo --ssh-listcomando (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-agentstrumento 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!).