Importar minha chave SSH como subchave GPG para usar para autenticação SSH

5

Eu criei recentemente uma chave PGP para assinar meus commits e está funcionando corretamente. Eu também descobri que o gpg se integra melhor com o meu O.S. (Kubuntu) do que o ssh-agent.

Eu sou preguiçoso e gostaria de evitar a necessidade de substituir minha chave SSH em todos os vários servidores aos quais tenho acesso.

Existe alguma opção para eu importar minha chave SSH existente como subchave da minha chave PGP e então executar o agente gpg com suporte ssh-agent para que quando eu executar ssh something ele use minha subchave e use o agente gpg para perguntar para a frase secreta?

Idealmente, eu forneço o passhprase apenas uma vez, para a minha chave PGP principal e, em seguida, sempre que eu fizer commit ou efetuar login através do ssh, ele usa o caminho certo.

É possível? (Eu sei que eles são de formato diferente, mas isso é tudo que eu sei)

    
por Fire-Dragon-DoL 23.06.2017 / 05:07

2 respostas

4

Encontrou uma abordagem fácil. Você precisa do utilitário pem2openpgp do projeto monkeysphere e da capacidade de gpg2 de importar a chave existente como subchave.

Primeiro converta a chave SSH para o formato OpenPGP. Você tem que privode um novo ID de usuário, conforme exigido pelo GPG.

$ pem2openpgp $TEMP_USERID < .ssh/id_rsa | gpg2 --import

Agora você tem um novo ID de usuário com sua chave SSH como chave mestra. Você pode verificar com gpg2 -K (eu defini TEMP_USERID para TEST ). Anote também o keygrip da chave recém-importada:

$ gpg2 -K --with-keygrip $TEMP_USERID
sec   rsa4096 2018-03-02 [C]
      21C766CAC691F395D640E8207E9F9F883D1E49D8
      Keygrip = AAB27E63622E87B27AC34293EDF52C3AB016CA2E
uid           [ unknown] TEST

Agora use gpg2 --expert --edit-key em sua chave mestra e importe a chave acima como sua subchave:

$ gpg2 --expert --edit-key $YOURUSERID
gpg> addkey
......
(13) Existing key
Enter the keygrip: AAB27E63622E87B27AC34293EDF52C3AB016CA2E
......

gpg2 fará muitas perguntas, como de costume. Lembre-se de ativar e desativar os recursos de chave corretos (sinal: off, encrypt: off, auth: on).

Depois disso, você deve ter a chave SSH importada como a subchave da sua chave mestra. Verifique:

$ gpg2 -K $YOURUSERID --with-keygrip
sec   rsa4096 2016-02-02 [SC]
......
uid           [ 绝对 ] CUI Hao (cvhc) <[email protected]>
......
ssb   rsa4096 2018-02-21 [A]
      Keygrip = AAB27E63622E87B27AC34293EDF52C3AB016CA2E

Você pode usar gpg2 --export-ssh-key para verificar se a subchave importada é de fato igual à chave SSH original.

Observe que o ID de usuário temporário usado para importação de chave ainda está no seu chaveiro. Você deve excluí-lo manualmente. O GnuPG impede que você remova a chave pública / ID do usuário sem excluir as chaves privadas correspondentes. No entanto, como o usuário temporário e o compartilhamento da subchave importada compartilham a mesma chave privada, gpg2 --delete-secret-keys $TEMP_USERID também exclui a subchave importada.

Minha solução é fazer backup de chaves privadas em ~/.gnupg/private-keys-v1.d e movê-lo de volta após a subchave importada gpg2 .

Eu envio uma solicitação de recurso para solicitar ao GnuPG uma opção para excluir a chave pública sem afetar a chave privada: link

    
por 02.03.2018 / 04:02
3

Tudo o que você precisa:

export GPG_TTY=$(tty)
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
ssh-add -c -t 3600 ~/.ssh/id_rsa   # set the cache lifetime as 3600s

Depois, sinta-se à vontade para remover os arquivos: mv ~/.ssh/id_rsa.* /path/to/backup .

Agora você pode fazer um login SSH para testes.

Afinal, lembre-se de adicionar os Ambientes ao seu perfil, como .profile ou ~/.bashrc .

(Ps: Você pode encontrar a chave ssh (no formato gpg) em ~/.gnupg/private-keys-v1.d/ e com o keygrip como seu nome, que pode ser usado como uma subchave.

Referência:

link

link

    
por 24.10.2018 / 06:52

Tags