Perdi o acesso ao meu ~/.ssh/id_dsaarquivo (arquivo de chave privada OpenSSH no algoritmo DSA) devido ao esquecimento da senha.
Mas, originalmente, eu o importei gpg-agente o protegi com uma senha de agente gpg, que eu sei. E a chave privada ainda está funcionando bem gpg-agentmesmo agora, embora agora eu deseje reconstruir o arquivo de chave privada do OpenSSH usando o que está armazenado gpg-agent.
Usando a gpg-connect-agentferramenta, com a seguinte sequência de comandos, acho que sou capaz de extrair a chave privada (no formato hex / ascii), embora não saiba como reconstruí-la para o formato original do arquivo de chave privada do OpenSSH:
- Comece
gpg-connect-agentcom a--hexopção. - No
>prompt, obtenha o ID hexadecimal da chave usando okeyinfo --ssh-listcomando (para ser mais preciso, é o terceiro campo que fornece o ID hexadecimal da chave). - No
>prompt, executekeywrap_key --export. - No
>prompt, executeexport_key <enter hex ID from step 2>ouexport_key --openpgp <enter hex ID from step 2>.
Agora, depois de solicitar a senha, recebê-la e confirmá-la, a gpg-connect-agentferramenta exibe algumas dezenas de linhas de códigos hex & ascii, que eu suspeito muito ser a minha chave privada ssh privada importada.
Em seguida, ele mostra OK, certamente implicando que a operação foi bem-sucedida.
Supondo que o que é exibido seja realmente minha chave privada ssh (conforme "help export_key", o que foi despejado na tela é uma versão criptografada da chave aeswrap-128; provavelmente criptografada com a minha senha conhecida do agente gpg), alguma ajuda sobre como converter essas informações para o formato tradicional de chave privada ssh seria muito apreciado (um programa perl / python / shell / C para isso seria um bônus!).