• 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/demo.conf
systemctl restart sshd.service

Remote: Je regarde quel est le socket utilisé par le gpg-agent du serveur.

gpgconf --list-dir agent-socket

Local: Je regarde quel est le socket supplémentaire utilisable par mon gpg-agent local.

gpgconf --list-dir agent-extra-socket

Local: Je retourne à mon fichier conf, je rajoute les résultats des 2 commandes précédentes afin que le gpg-agent distant utilise en fait mon gpg-agent local :

host demo
    hostname 192.168.122.209
    User foopgp
    RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra

Local: Et désormais l’utilisation de ma clé privée est possible sur le remote sans y être présente:

ssh demo
gpg --list-secret-keys
...

Je peux signer, chiffrer etc. exactement comme en local.

Sources: