{"id":3310,"date":"2018-11-11T11:11:22","date_gmt":"2018-11-11T10:11:22","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=3310"},"modified":"2019-04-24T20:29:39","modified_gmt":"2019-04-24T18:29:39","slug":"connexion-ssh-avec-gpg-agent","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=3310","title":{"rendered":"Connexion SSH avec gpg-agent"},"content":{"rendered":"\n<p>Dans l&rsquo;\u00e9pisode pr\u00e9c\u00e9dent, je d\u00e9crivais comment j&rsquo;avais cr\u00e9\u00e9 mes clefs et sous-clefs et la fa\u00e7on dont j&rsquo;avais export\u00e9 les sous-clefs sur une YubiKey. Place \u00e0 une mise en application du c\u00f4t\u00e9 de la connexion SSH entre un poste client et un serveur. J&rsquo;utilise d\u00e9j\u00e0 le processus d&rsquo;authentification par clef SSH pour me connecter sur mes machines serveurs, distantes g\u00e9ographiquement ou pas, virtuelles ou non. Le principe est donc d&rsquo;utiliser la clef d&rsquo;authentification pour se connecter en SSH aux machines.<\/p>\n\n\n\n<p>On gagne en praticit\u00e9, car une seule clef va nous permettre de nous connecter \u00e0 chacune de nos machines une fois celles-ci configur\u00e9es. Cela passe n\u00e9anmoins par une configuration de la machine cliente pour utiliser gpg-agent en lieu et place de ssh-agent, chose qui n&rsquo;est pas forc\u00e9ment ais\u00e9e. Je vais d\u00e9crire la configuration que j&rsquo;ai mise en place, r\u00e9sultat de plusieurs \u00e9checs successifs avant d&rsquo;arriver \u00e0 quelque chose de fonctionnel et en sachant que j&rsquo;utilise Xorg et I3 pour la partie affichage et interface.<br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Configuration c\u00f4t\u00e9 serveur<\/h4>\n\n\n\n<p>La premi\u00e8re \u00e9tape consiste \u00e0 r\u00e9cup\u00e9rer les informations de la clef n\u00e9cessaires \u00e0 la configuration du serveur. Apr\u00e8s avoir ins\u00e9r\u00e9 notre YubiKey, nous ex\u00e9cutons donc la commande suivante :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>$ ssh-add -L\nssh-rsa BFFEB3NzaC ... pdqsdfwX6m1 cardno:000123456789<\/code><\/pre>\n\n\n\n<p>Nous pouvons alors copier les informations renvoy\u00e9es par cette commande et les ins\u00e9rer dans le fichier <em>authorized_keys<\/em> de notre serveur.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Configuration c\u00f4t\u00e9 client<\/h4>\n\n\n\n<p>Le but est maintenant de remplacer <em>ssh-agent<\/em> par <em>gpg-agent<\/em>. Nous commen\u00e7ons donc par configurer ce dernier en \u00e9ditant le fichier <em>.gnupg\/gpg-agent.conf<\/em> :<br><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>enable-ssh-support<\/code> <br><code>pinentry-program \/usr\/bin\/pinentry-curses<\/code> <br><code>max-cache-ttl 300<\/code> <br><code>default-cache-ttl 300<\/code><\/pre>\n\n\n\n<p>Dans le fichier <em>.pam_environment<\/em>, nous ajoutons les lignes suivantes :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>SSH_AGENT_PID   DEFAULT=<\/code> <br><code>SSH_AUTH_SOCK DEFAULT=\"${XDG_RUNTIME_DIR}\/gnupg\/S.gpg-agent.ssh\"<\/code><\/pre>\n\n\n\n<p>Et enfin dans .zshrc :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>export GPG_TTY=$(tty)<\/code> <br><code>gpg-connect-agent updatestartuptty \/bye &gt;&gt; \/dev\/null<\/code><\/pre>\n\n\n\n<p>Il me semble que cette configuration est suffisante pour obtenir quelque chose de fonctionnel. Sur mon poste, j&rsquo;ai quelques d\u00e9clarations suppl\u00e9mentaires du c\u00f4t\u00e9 des fichiers <em>.profile<\/em>, <em>.zprofile<\/em> qui font doublon pour la d\u00e9claration de la variable <em>GPG_TTY<\/em>. Il devrait \u00eatre possible de les supprimer sans risques.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Test unique<\/h4>\n\n\n\n<p>Pour r\u00e9aliser un test unique, apr\u00e8s configuration de <em>gpg-agent<\/em> et avant d&rsquo;effectuer toutes les modifications ci-dessus et de tester la persistance au red\u00e9marrage, j&rsquo;ai utilis\u00e9 les commandes ci-dessous pour tester la connexion au serveur avec la clef d&rsquo;authentification et v\u00e9rifier cette premi\u00e8re \u00e9tape.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>sudo killall gpg-agent<\/code><br><code>sudo killall ssh-agenteval $( gpg-agent --daemon --enable-ssh-support )<\/code><\/pre>\n\n\n\n<p>Nous pouvons alors essayer la connexion SSH vers notre serveur et retrouver la configuration utilisant <em>ssh-agent<\/em> apr\u00e8s un simple red\u00e9marrage. L&rsquo;utilisation de l&rsquo;option <em>-vvv<\/em> \u00e9tant particuli\u00e8rement utile pour suivre les \u00e9tapes de connexion et d\u00e9tecter d&rsquo;\u00e9ventuels probl\u00e8mes.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>ssh user@server -vvv<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Conclusion<\/h4>\n\n\n\n<p>Avec cette configuration, je suis donc en mesure de me connecter \u00e0 mes serveurs via SSH en utilisant ma clef d&rsquo;authentification stock\u00e9e sur ma YubiKey et le PIN associ\u00e9 \u00e0 la clef. S&rsquo;il est plut\u00f4t ais\u00e9 de r\u00e9aliser une premi\u00e8re connexion r\u00e9ussie, la principale difficult\u00e9 concerne la persistance de la configuration et le lancement correcte des composants \u00e0 l&rsquo;ouverture de la session; en particulier pour l&rsquo;affichage de l&rsquo;interface de saisi du PIN via <em>pinentry-curses<\/em>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Sources<\/h4>\n\n\n\n<p><a href=\"https:\/\/incenp.org\/notes\/2015\/gnupg-for-ssh-authentication.html\" target=\"_blank\" rel=\"noopener noreferrer\">Using GnuPG (2.1) for SSH authentication<\/a><br><a href=\"https:\/\/ocramius.github.io\/blog\/yubikey-for-ssh-gpg-git-and-local-login\" target=\"_blank\" rel=\"noopener noreferrer\">YubiKey for SSH, Login, 2FA, GPG and Git Signing<\/a><br><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans l&rsquo;\u00e9pisode pr\u00e9c\u00e9dent, je d\u00e9crivais comment j&rsquo;avais cr\u00e9\u00e9 mes clefs et sous-clefs et la fa\u00e7on dont j&rsquo;avais export\u00e9 les sous-clefs sur une YubiKey. Place \u00e0 une mise en application du c\u00f4t\u00e9 de la connexion SSH entre un poste client et un serveur. J&rsquo;utilise d\u00e9j\u00e0 le processus d&rsquo;authentification par clef SSH pour me connecter sur mes &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=3310\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Connexion SSH avec gpg-agent&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[377],"tags":[],"class_list":["post-3310","post","type-post","status-publish","format-standard","hentry","category-crypto"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3310"}],"version-history":[{"count":5,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3310\/revisions"}],"predecessor-version":[{"id":3544,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/3310\/revisions\/3544"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}