Perdí el acceso a mi ~/.ssh/id_dsa
archivo (archivo de clave privada OpenSSH en el algoritmo DSA), debido a que olvidé la frase de contraseña.
Pero, originalmente, lo he importado gpg-agent
y lo he protegido con una frase de contraseña del agente gpg, que sí sé. Y la clave privada todavía funciona bien gpg-agent
incluso ahora, aunque ahora deseo reconstruir el archivo de clave privada OpenSSH utilizando lo que está almacenado gpg-agent
.
Utilizando la gpg-connect-agent
herramienta, con la siguiente secuencia de comandos, creo que puedo extraer la clave privada (en formato hexadecimal / ascii), aunque no sé cómo reconstruirla al formato de archivo de clave privada OpenSSH original:
- Comience
gpg-connect-agent
con la--hex
opción. - En la
>
solicitud, obtenga la ID hexadecimal de la clave utilizando elkeyinfo --ssh-list
comando (para ser precisos, es el tercer campo que proporciona la ID hexadecimal de la clave). - En el
>
indicador, ejecutekeywrap_key --export
. - En el
>
indicador, ejecuteexport_key <enter hex ID from step 2>
oexport_key --openpgp <enter hex ID from step 2>
.
Ahora, después de solicitar la frase de contraseña, recibirla y confirmarla, la gpg-connect-agent
herramienta muestra una docena de líneas de códigos hexadecimales y ascii, que sospecho que son mi clave privada ssh importada original.
Luego, se muestra OK
, lo que seguramente implica que la operación fue exitosa.
Suponiendo que lo que se muestra es de hecho mi clave privada ssh (según "help export_key", lo que se arrojó en la pantalla es una versión cifrada de la clave aeswrap-128; muy probablemente cifrada con mi frase de contraseña conocida del agente gpg), alguna ayuda sobre cómo convertir esa información al formato de clave privada ssh tradicional sería muy apreciado (¡un programa perl / python / shell / C para hacerlo sería una ventaja!).