URL: https://linuxfr.org/users/spack/journaux/gnupg-et-authentification-ssh Title: GnuPG et authentification SSH Authors: Spack Date: 2015年07月26日T13:04:27+02:00 License: CC By-SA Tags: ssh, gnupg et gpg Score: 22 Vous avez maintenant votre [clé PGP](https://linuxfr.org/users/spack/journaux/openpgp-enlarge-your-privacy) et la traînez un peu partout avec vous. Il s'agirait maintenant de mettre cette clé unique à profit. Et quoi de mieux que de commencer avec l'authentification SSH ? Ça tombe bien, l'agent GnuPG peut aussi agir comme [agent SSH](https://en.wikipedia.org/wiki/Ssh-agent) et ainsi servir d'intermédiaire entre SSH et votre clé PGP stockée sur votre clé physique. On va d'abord commencer par changer un peu la configuration de GnuPG afin d'afficher l'usage réservé aux clés. Ça permettra de retrouver facilement la clé d'authentification. Il suffit d'ajouter la ligne suivante dans le fichier `~/.gnupg/gpg.conf` : ```conf list-options show-usage ``` Voilà maintenant la commande `gpg2 -k` listera les clés ainsi que leur usage. `S` pour signature, `E` pour chiffrement et `A` pour authentification. C'est cette dernière qui nous intéresse. La prochaine étape est d'indiquer à GnuPG qu'il pourra utiliser notre clé d'authentification pour SSH. Pour cela on rajoute la poignée de la clé (*keygrip*) dans le fichier `~/.gnupg/sshcontrol`. ```console $ gpg2 -k --with-keygrip /home/jdoe/.gnupg/pubring.gpg ------------------------------ pub rsa4096/AABBCCDD 2015-XX-XX [SC] [expire : 2018-XX-XX] Empreinte de la clef = AABB CCEE XXXX XXXX XXXX XXXX XXXX XXXX XXXX FFGG Keygrip = AABBCCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXDD uid [ultimate] John Doe uid [ultimate] [jpeg image of size 47XX] sub rsa2048/BBCCDDEE 2015-XX-XX [S] [expire : 2016-XX-XX] Keygrip = BBCCDDXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXEE sub rsa2048/CCDDEEFF 2015-XX-XX [E] [expire : 2016-XX-XX] Keygrip = CCDDEEXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXFF sub rsa2048/DDEEFFGG 2015-XX-XX [A] [expire : 2016-XX-XX] Keygrip = DDEEFFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXGG ``` On repère la clé d'authentification `DDEEFFGG` avec la poignée associée que la va rajouter au fichier `~/.gnupg/sshcontrol`. ```console $ echo "DDEEFFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXGG 0">> ~/.gnupg/sshcontrol ``` Le chiffre après la poignée est la durée en seconde que l'agent pourra garder la clé en mémoire. Si `0` la valeur par défaut est utilisée qui est de 30 minutes. Il faut maintenant activer le support SSH dans l'agent GnuPG. Pour cela, on édite le fichier `~/.gnupg/gpg-agent.conf` et on y insère les lignes suivantes : ```conf enable-ssh-support pinentry-program /usr/bin/pinentry-gtk #allow-emacs-pinentry ``` Pour ceux qui utilisent Emacs, la dernière ligne peut être utile. L'interface `pinentry` est aussi disponible en Qt ou curses. Consultez votre gestionnaire de paquets pour installer l'interface qui vous convient. Si vous utilisez systemd et une unité utilisateur, il faudra relancer l'agent afin de prendre en compte la nouvelle configuration. ```console $ systemctl --user restart gpg-agent.service ``` La dernière étape est de [configurer votre environnent](https://www.gnupg.org/documentation/manuals/gnupg/Agent-Examples.html#Agent-Examples) afin de permettre à SSH de trouver l'agent GnuPG. Il suffit d'exporter les bonnes variable d'environnement dans le script d'initialisation de votre shell. ```sh export GPG_TTY=$(tty) unset SSH_AGENT_PID if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then export SSH_AUTH_SOCK="${HOME}/.gnupg/S.gpg-agent.ssh" fi ``` J'ai aussi eu un petit [soucis](https://www.gnupg.org/documentation/manuals/gnupg/Common-Problems.html) avec SSH ne sachant pas sur quelle affichage demander le code PIN. Il faut donc aussi lors de l'initialisation du shell indiquer l'affichage à utiliser. La ligne suivante devrait faire l'affaire : ```sh echo "UPDATESTARTUPTTY" | gpg-connect-agent> /dev/null 2&>1 ``` Voilà, tout est prêt sauf un petit détails. Où trouver la clé publique au format reconnu par OpenSSH ? `ssh-add -L` est ton ami. L'empreinte de la clé sera indiquée avec le label `cardno:_#SERIE_`. Il suffit ensuite d'ajouter cette empreinte au fichier `~/.ssh/authorized_keys` sur le serveur distant comme à l'accoutumé. Vous pouvez maintenant profiter de l'authentification SSH par clé publique avec votre clé PGP.

AltStyle によって変換されたページ (->オリジナル) /