• Accueil
  • Utiliser ses clés privées locales à travers ssh - Agent Forwarding

GPG Agent Forwarding

blog-thumb

Comment utiliser ses clés privées à distance, et donc sa Yubikey, tout en gardant les secrets en local, secrets et local.

Je parts d’une VM (machine virtuelle) “neuve” pour cette démo.

Remote: Si besoin.

sudo apt install openssh-server

Local: La connexion ssh fonctionne.

ssh foopgp@192.168.122.209
...
$ echo bonjour > top-secret.txt
$ cat top-secret.txt
bonjour

Local: Je rajoute la configuration dans ~/.ssh/config,

cat .ssh/config
host demo
    hostname 192.168.122.209
    User foopgp

Local: afin de me reconnecter plus facilement.

ssh demo
...
$ cat top-secret.txt
bonjour

Remote: J’importe ma clé publique, plusieurs solutions, exemple.

$ curl -s "https://keys.foopgp.org/pks/lookup?op=get&search=0x2C364630A2436D7E" \
| awk "/-----BEGIN PGP PUBLIC KEY BLOCK-----/,/-----END PGP PUBLIC KEY BLOCK-----/" \
| gpg --import

gpg: key 2C364630A2436D7E: 1 signature not checked due to a missing key
gpg: clef 2C364630A2436D7E : clef publique « piseb <piseb@mailo.com> (udid4=D9SrwuxesuMU90PM8xypxQe_48.78_002.19) » importée
gpg:       Quantité totale traitée : 1
gpg:                     importées : 1
gpg: aucune clef de confiance ultime n'a été trouvée

Remote: Seule la publique est évidemment présente. On peut vérifier.

$ gpg --list-secret-keys
$ gpg --list-public-keys
...

Remote: Je rajoute “StreamLocalBindUnlink yes” à la configuration du serveur ssh, ci-dessous dans un fichier dédié, et je redémarre le service ssh:

sudo -i
echo "StreamLocalBindUnlink yes" > /etc/ssh/sshd_config.d/streamlocal.conf
systemctl restart sshd.service

L’option StreamLocalBindUnlink permet de spécifier si un fichier de socket de domaine Unix pour la redirection de port local ou distant doit être supprimé avant d’en créer un nouveau. Si le fichier de socket existe déjà et si StreamLocalBindUnlink n’est pas activée, sshd ne pourra pas rediriger le port vers le fichier de socket de domaine Unix. Cette option n’est utilisée que pour la redirection de port vers un fichier de socket de domaine Unix.

Pour la suite, on utilise le petit script qu’un gentil membre de l’association a publié sur codeberg. Il s’appelait à l’origine ssh_gpgforward ; il est aujourd’hui distribué comme paquet Debian autonome sous le nom sshwgpg (SSH With GnuPG , v1.1+). Sur un système Djibian / Debian :

sudo apt install sshwgpg

(Note 2026-05 : dans djibian-gpgconfig ≥ 0.10, /usr/bin/ssh_gpgforward est conservé comme lien symbolique de compatibilité vers /usr/bin/sshwgpg, donc les scripts existants continuent de fonctionner.)

sshwgpg user@demo.org "hostname -f | gpg --clearsign | tee  >( gpg --verify )"

Et l’on peut signer, déchiffrer etc. exactement comme en local. L’article Une seule clé physique pour toutes les machines d’Internet (mai 2026) déroule la variante Djibian tout-équipée de la même idée, plus le rebond SSH.

Sources: