As chaves GPG e SSH são intercambiáveis?

70

Quero gerar uma RSAchave GPGe usá-la no SSHlogin. Isso é possível? Se sim, como?

edit: veja a resposta da @ wwerner, não tentei, mas parece ser a solução atual (a partir de 2018)

destan
fonte

Respostas:

26

Eu sei que este é um post antigo, mas para pessoas como eu tropeçando nisso:

É agora (desde gpg 2.1) possível simplesmente extrair as chaves SSH diretamente usando gpg: gpg --export-ssh-key <key id>!.

A !marca é opcional, torna a chave primária exportável e omite a verificação se a chave é compatível com autenticação ([CA]).

Detalhes:

wwerner
fonte
Essa resposta deve ser a aceita. :)
Inkeliz 31/08/18
30

Estou pesquisando sobre esse tópico e posso dar algumas dicas, mas ainda não encontrei uma maneira de fazê-lo funcionar.

Monkeysphere

O Monkeysphere parece um projeto muito interessante, mas não consegui compilá-lo no Mac OS X sem obstruir meu pequeno espaço livre em disco com o MacPorts.

Usando gpgkey2ssh

A primeira maneira que sugiro que você tente é gerar uma entrada compatible_keys compatível a partir do seu ID de chave (por exemplo, BFB2E5E3) com

gpgkey2ssh BFB2E5E3 | tee -a ~/.ssh/authorized_keys

Aqui eu o adicionei ao meu host local desde que executei um servidor ssh para fins de teste, mas é claro que você deve adicioná-lo ao host de destino ~/.ssh/authorized_keys. Em seguida, você precisa dizer ao SSH para usar a parte privada dessa chave durante a autenticação, mas simplesmente exportar uma versão blindada ASCII do par de chaves não funciona:

gpg --armor --export-secret-key BFB2E5E3! |tee ~/.ssh/id_rsa
gpg --armor --export BFB2E5E3! | tee ~/.ssh/id_rsa.pub
chmod 400 ~/.ssh/id_rsa
ssh localhost

Usando gpg-agent

gpg-agenttem a opção --enable-ssh-supportque permite usá-lo como um substituto para o bem conhecido ssh-agent. Eu li algumas pessoas tentando adicionar por meio da ssh-addchave GPG após o lançamento gpg-agentdesta maneira:

gpg-agent --enable-ssh-support --daemon
gpg --armor --export-secret-key BFB2E5E3! | tee ~/.gnupg/exported-keys/BFB2E5E3_sec.asc
ssh-add ~/.gnupg/exported-keys/BFB2E5E3_sec.asc

Mas acho que isso nunca funcionará. A página de manual do gpg-agent diz:

As chaves SSH, que devem ser usadas por meio do agente, precisam ser adicionadas ao gpg-agent inicialmente por meio do utilitário ssh-add. Quando uma chave é adicionada, o ssh-add solicita a senha do arquivo de chaves fornecido e envia o material da chave não protegido ao agente; isso faz com que o gpg-agent solicite uma senha, que deve ser usada para criptografar a chave recém-recebida e armazená-la em um diretório específico do gpg-agent.

Portanto, parece que gpg-agentdeve ser usado como uma medida adicional para proteger suas chaves SSH com uma criptografia GPG.

Convertendo uma chave GPG para OpenSSH

Jérôme Pouiller em seu blog escreve que o utilitário Gpgsm pode exportar chaves e certificados no PCSC12; eles podem ser usados ​​pelo OpenSSH:

gpgsm -o secret-gpg-key.p12 --export-secret-key-p12 0xXXXXXXXX
openssl pkcs12 -in secret-gpg-key.p12 -nocerts -out gpg-key.pem
chmod 600 gpg-key.pem
cp gpg-key.pem ~/.ssh/id_rsa
ssh-keygen -y -f gpg-key.pem > ~/.ssh/id_rsa.pub

Mas não encontrei uma maneira de gpgsmaceitar meus pares de chaves gpg.

Outras coisas que você pode tentar

O SSH tem uma -Iopção para especificar que a biblioteca compartilhada PKCS # 11 sshdeve usar para se comunicar com um token PKCS # 11, fornecendo a chave RSA privada do usuário. ssh-keygenpode usar a chave pública ou privada RFC4716 / SSH2, chaves públicas PEM PKCS8 e chaves públicas PEM para gerar uma chave privada (ou pública) compatível com OpenSSH usando as opções -ie -m.

Ainda não consigo encontrar uma maneira de juntar tudo.

Claudio Floreani
fonte
5
Observe que gpgkey2sshfoi substituído pela --export-ssh-keyversão 2.1.11 (26-01-16 2016). Levei um tempo para perceber isso. O uso é gpg --export-ssh-key BFB2E5E3.
MayeulC
Há uma boa publicação no Linode, mas eles usaram o gpg-agent para se autenticar com o SSH. Eles não convertem a chave secreta gpg em uma chave privada SSH.
Xorax 29/08
14

Não, eles não são intercambiáveis. Sim, é possível usar chaves GPG para autenticação - o pacote Monkeysphere possui ferramentas para extrair o par de chaves bruto RSA do seu certificado GPG.

  1. Seu certificado GPG precisará de uma subchave com o sinalizador de capacidade "autenticação". Para criar essa subchave, execute uma vez:

    monkeysphere g
    
  2. Agora adicione suas subchaves de autenticação ao ssh-agent :

    monkeysphere s
    

Um pouco relevante: esse tópico do gnupg-users .

gravidade
fonte
9

Com as informações das respostas desta pergunta e a ajuda da lista de discussão gnupg-users, consegui descobrir como usar minha chave GPG para autenticação SSH. Como já mencionado por Claudio Floreani em sua resposta, existem alguns métodos possíveis para fazer isso.

Eu escrevi um post no blog sobre algumas soluções possíveis: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Para resumir: Você pode usar o GnuPG 2.1, que está atualmente na versão beta. Ao usar esta versão, você pode simplesmente iniciar o gpg-agent com a opção --enable-ssh-support e adicionar o keygrip da sua chave GPG (ou subchave) em ~ / .gnupg / sshcontrol.

Quando você estiver usando a versão estável atual do GnuPG (2.0.x), poderá usar o monkeysphere para adicionar sua chave ao gpg-agent (novamente, depois de iniciar o gpg-agent com a opção --enable-ssh-support).

Também é possível usar o chaveiro GNOME (ou mesmo o agente ssh comum) com a ajuda do monkeysphere. O único problema nesse caso é que você precisará adicionar novamente sua chave ao fazer logon novamente (no Gnome ou no XFCE). Para resolver isso, você pode exportar manualmente sua chave e convertê-la.

jeroen
fonte