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: