web-dev-qa-db-fra.com

Les clés PGP et SSH sont-elles interchangeables?

Je veux générer une clé RSA dans GPG et l'utiliser dans le login SSH. Est-ce seulement possible? Si c'est le cas, comment?

edit: voir la réponse de @wwerners, je ne l'ai pas essayée mais cela semble être la solution actuelle (à partir de 2018)

66
destan

Je fais des recherches sur ce sujet et je peux vous donner quelques indices, mais je n'ai pas encore trouvé le moyen de le faire fonctionner.

Monkeysphhere

Monkeysphere semble un projet très intéressant, mais je n’ai pas pu le compiler sous Mac OS X sans encombrer mon petit espace disque disponible avec MacPorts.

Utiliser gpgkey2ssh

La première méthode que je vous suggère d’essayer consiste à générer une entrée compatible allowed_keys à partir de votre clé (par exemple, BFB2E5E3) avec

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

Ici, je l'ai ajouté à mon hôte local depuis que j'ai utilisé un serveur ssh à des fins de test, mais vous devez bien sûr l'ajouter à l'hôte cible ~/.ssh/authorized_keys. Ensuite, vous devez indiquer à SSH d'utiliser la partie privée de cette clé lors de l'authentification, mais l'exportation d'une version blindée ASCII de la paire de clés ne fonctionne pas:

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

Utiliser gpg-agent

gpg-agent a l'option --enable-ssh-support qui lui permet de l'utiliser comme remplacement immédiat du bien connu ssh-agent. J'ai lu que certaines personnes essayaient d'ajouter via ssh-add leur clé GPG après avoir lancé gpg-agent de cette façon:

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

Mais je ne pense pas que cela fonctionnera jamais. La page de manuel de gpg-agent indique:

Les clés SSH, qui doivent être utilisées via l'agent, doivent être ajoutées à l'agent gpg par le biais de l'utilitaire ssh-add. Lorsqu'une clé est ajoutée, ssh-add demande le mot de passe du fichier de clé fourni et envoie le matériel de clé non protégé à l'agent. Ceci oblige l'agent-gpg à demander une phrase secrète, qui doit être utilisée pour chiffrer la clé nouvellement reçue et la stocker dans un répertoire spécifique à l'agent-gpg.

Il semble donc que gpg-agent devrait être utilisé comme mesure supplémentaire pour protéger vos clés SSH avec un cryptage GPG.

Conversion d'une clé GPG en OpenSSH

Jérôme Pouiller dans son blog écrit que l'utilitaire Gpgsm peut exporter des clés et des certificats dans PCSC12; ils peuvent ensuite être utilisés par 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

Mais je n'ai pas trouvé le moyen de faire gpgsm accepter mes paires de clés gpg.

Autres choses que vous pouvez essayer

SSH a une option -I pour spécifier la bibliothèque partagée PKCS # 11 que ssh doit utiliser pour communiquer avec un jeton PKCS # 11 fournissant la clé RSA privée de l'utilisateur. ssh-keygen peut utiliser la clé publique ou privée RFC4716/SSH2, les clés publiques PEM PKCS8 et les clés publiques PEM pour générer une clé privée (ou publique) compatible OpenSSH à l'aide des options -i et -m.

Je ne parviens toujours pas à trouver le moyen de tout mettre en place.

28
Claudio Floreani

Je sais que ceci est un ancien post, mais pour les gens comme moi trébucher dessus:

Il est maintenant possible (depuis gpg 2.1) d'extraire simplement les clés ssh directement en utilisant gpg: gpg --export-ssh-key <key id>!.

La marque ! est facultative, elle permet d'exporter la clé primaire et omet de vérifier si celle-ci est compatible avec l'authentification ([CA]).

Détails:

23
wwerner

Non, ils ne sont pas interchangeables. Oui, il est possible d'utiliser des clés GPG pour l'authentification. Le package Monkeysphere contient des outils permettant d'extraire la paire de clés RSA brute de votre certificat GPG.

  1. Votre certificat GPG nécessite une sous-clé avec l'indicateur de capacité "authentification". Pour créer une telle sous-clé, exécutez une fois:

    monkeysphere g
    
  2. Maintenant, ajoutez vos sous-clés d’authentification à ssh-agent :

    monkeysphere s
    

Un peu pertinent: ce fil de discussion gnupg-users .

13
grawity

Grâce aux informations des réponses à cette question et à l'aide de la liste de diffusion gnupg-users, j'ai pu comprendre comment utiliser ma clé GPG pour l'authentification SSH. Comme déjà mentionné par Claudio Floreani dans sa réponse, il existe plusieurs méthodes pour le faire.

J'ai écrit un article de blog sur quelques solutions possibles: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

Pour résumer: Soit vous utilisez GnuPG 2.1, qui est actuellement en version bêta. Lorsque vous utilisez cette version, vous pouvez simplement lancer gpg-agent avec l'option --enable-ssh-support et ajouter la clé d'accès pour votre clé GPG (ou sous-clé) dans ~/.gnupg/sshcontrol.

Lorsque vous utilisez la version actuelle stable de GnuPG (2.0.x), vous pouvez utiliser monkeysphere pour ajouter votre clé à gpg-agent (à nouveau, après avoir lancé gpg-agent avec l'option --enable-ssh-support).

Il est également possible d'utiliser le trousseau de clés GNOME (ou même l'agent ssh habituel) à l'aide de monkeysphere. Le seul problème dans ce cas est que vous devrez rajouter votre clé pour vous reconnecter (dans Gnome ou XFCE). Pour résoudre ce problème, vous pouvez exporter manuellement votre clé et la convertir.

8
jeroen