
Suite et amplification de l’étude pas-à-pas de Sébastien Picardeau (sept. 2025). Même objectif, moins d’étapes, et une propriété nouvelle : le rebond SSH avec la même clé physique.
Vous vous connectez en ssh sur plusieurs machines par jour. Sur lesquelles vous réalisez une signature numérique, déchiffrez un fichier, ou repartez en ssh ailleurs. La réponse classique consiste à copier vos clés privées sur chacune de ces machines — et à parier qu’à la prochaine entreprise de surveillance ou de cyber-attaque, ce ne sont pas vos secrets qui feront le butin. Cette réponse a mal vieilli.
La bonne réponse existe depuis des années (rediriger gpg-agent et ssh-agent sur SSH), mais sa mise en place est assez pénible pour que presque personne ne la fasse. Nous avons emballé cette bonne réponse dans un outil. Il s’appelle sshwgpg, il tient en 140 lignes de Bash, et il est livré dans notre dépôt de paquets Debian .
Sur la machine qui peut accéder à vos clés OpenPGP, vous tapez :
sshwgpg user@distant.example
Et vous atterrissez dans une session à distance assez sympathique :
gpg --sign, gpg --decrypt ou git commit -S fonctionnent à distance en utilisant localement vos clés de signature ou de déchiffrement ;ssh user@other.example ou sshwgpg user@other.ex fonctionnent à distance en utilisant localement vos clés d’authentification OpenPGP.Deux sockets, une commande, un certificat OpenPGP. Les octets de vos clés privées ne quittent jamais votre ordinateur, ou mieux si vous utilisez une YubiKey ou NitroKey : la puce au fin fond de leur silicium.
La plupart des tutoriels « gpg agent forwarding » qu’on trouve sur Internet s’arrêtent au premier saut. La redirection du socket SSH_AUTH_SOCK=…gpg-agent.ssh que sshwgpg inclut, permet de rebondir encore plus loin, plus facilement :
vous$ sshwgpg mneme@serveurA.org # ssh correctement configuré (cf. SSH_AUTH_SOCK) permet de vous authentifier avec votre clé OpenPGP.
serveurA$ sshwgpg mneme@serveurB.org # authentification ssh via votre clé OpenPGP, sécurisé physiquement par votre YubiKey/NitroKey.
serveurB$ git commit --gpg-sign # commit signé par la même clé OpenPGP, qui n'a pas quitté la YubiKey/NitroKey que vous tenez sur vous.
serveurB$ git push origin main # commit poussé via, ssh authentifié par votre clé OpenPGP, encore et toujours sur vous, bien au chaud.
Chaque saut rappelle, à travers les rebonds précédents, la même clé OpenPGP sur la machine d’origine. Débranchez la YubiKey/NitroKey : plus aucune machine ne peut signer ou déchiffrer vos données, ou vous authentifier. Couplé aux YubiKey/NitroKey, sshwgpg rend possible l’équivalent une signature manuscrite à distance qui resterait quand même de votre main.
Tant qu’une clé physique de sécurité est connectée, tout processus privilégié (root, ou compromission) peut demander à votre YubiKey/NitroKey de signer, déchiffrer ou authentifier autre chose que ce que vous avez initié. On réduit la surface d’attaque à peau de chagrin avec quelques garde-fous :
(1) est actif par défaut. (2), (3) et (4) sont des choix à faire selon le niveau de sécurité qu’on veut. (5) est la seul chose qu’aucun logiciel ne peut faire à votre place.
Le serveur OpenSSH distant sshd a besoin d’une option :
# /etc/ssh/sshd_config.d/80-StreamLocal.conf
StreamLocalBindUnlink yes
Sans elle, sshd refuse d’écraser un socket existant et la seconde connexion de sshwgpg n’arrive pas à le reprendre. C’est tout le pré-requis côté serveur pour faire fonctionner sshwgpg — et l’étude de Sébastien (2025-09-07) en est la version longue.
La seule dépendance d’exécution de sshwgpg est openssh-client. Sources et packaging Debian sur https://codeberg.org/foopgp/sshwgpg . Actuellement disponible via notre dépôt de paquets Debian :
sudo apt install sshwgpg
sshwgpg est l’outil côté client. Pour l’utiliser sereinement sur une flotte de serveurs, il faudrait sans Djibian configurer chacun d’eux : l’option sshd ci-dessus, un ~/.ssh/authorized_keys avec la bonne sous-clé SSH, gpg-agent réglé pour accepter le socket redirigé, SSH_AUTH_SOCK pointé sur le socket ssh de gpg-agent dans toute session login, etc.
Le paquet djibian-gpgconfig fait tout cela pour vous :
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) — toute session login pointe naturellement sur le socket redirigé) ;Et côté provisionnement utilisateur, le paquet bashlibs-pgpid permet de transformer une empreinte OpenPGP de 40 caractères hexa en un compte Linux complet :
Ce que ça donne de bout en bout :
# Sur le serveur djibian.example, en tant qu'admin :
sudo bl-djibian adduser --from-certificate D995BB48C67FD9C1E8A03F7CDEC98791AADC429B
# Depuis votre ordinateur, votre YubiKey/NitroKey branchée :
sshwgpg mneme@djibian.example
# Vous avez la clé de sécurité de Mnème et connaissez son code PÏN : vous êtes Mnème ; depuis djibian.example : vous signez, déchiffrez ou téléchargez comme à la maison
Sur un serveur non-Djibian, la même configuration tient en un useradd et plusieurs lignes de shell — voir l’étude précédente
.
Le modèle cloud dit : vos secrets vivent sur leurs serveurs, faites-leur confiance. Ce que sshwgpg (et le reste de la chaîne OpenPGP ID ) rend possible est l’opposé : les serveurs ne peuvent pas lire vos secrets sans la clé que vous tenez dans votre main. Ils ne peuvent plus manipuler vos données dans votre dos ; vous en reprenez le contrôle, littéralement, à travers votre clé physique de sécurité : YubiKey ou NitroKey.
Toute cette chaîne est libre, auditable, et tient dans nos paquets Djibian.
bl-djibian adduser) : https://codeberg.org/foopgp/bash-libsUsage : sshwgpg [OPTIONS] [SSH_OPTIONS] destination [SSH_OPTIONS] [command [argument …]]
Options :