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