YubiKey pour SSH et GitHub : le guide technique pour les développeurs
Ta clé SSH privée vit dans un fichier texte brut dans ~/.ssh/. Si quelqu'un accède à ton ordinateur portable ou l'infecte avec un malware, il peut la copier en quelques secondes. Il n'a besoin ni de ton mot de passe ni de ton empreinte.
Une YubiKey change cela. La clé privée ne quitte jamais le matériel — même toi tu ne peux pas l'exporter. Sans la clé physique dans le port USB ou près de la NFC, aucune authentification n'est possible.
- Une clé SSH soutenue par du matériel FIDO2
- Signature des commits Git avec cette même clé
- YubiKey comme clé de sécurité sur GitHub (2FA)
Pourquoi le modèle de menace change
Une clé SSH normale est un fichier. Elle peut être copiée, divulguée dans une sauvegarde mal configurée ou volée par un malware qui lit le disque.
Une clé SSH soutenue par YubiKey (-sk, pour « security key ») est générée à l'intérieur de la puce FIDO2. Le système ne conserve qu'une référence. Sans la clé physique connectée, cette référence ne sert à rien.
De plus, tu peux exiger une vérification tactile à chaque utilisation. Même si quelqu'un a accès à distance à ta machine, il devrait toucher physiquement la YubiKey pour s'authentifier.
Générer une clé SSH soutenue par YubiKey
Tu as besoin d'OpenSSH 8.2 ou supérieur. C'est inclus dans macOS et dans la plupart des distributions Linux modernes. Sous Windows, utilise le client OpenSSH intégré ou WSL.
Exécute ssh-keygen -t ed25519-sk -O resident -O verify-required -C "ton-email@domaine.com". L'option resident stocke la clé également dans la YubiKey, pas seulement sur ton disque.
Le terminal te demandera le PIN de la YubiKey puis de toucher le capteur. C'est ainsi que la paire de clés est générée à l'intérieur de la puce.
id_ed25519_sk.pub est généré dans ~/.ssh/. C'est celle que tu ajoutes à GitHub, GitLab ou au authorized_keys de ton serveur.
Connecte-toi par SSH comme d'habitude. Le système te demandera de toucher la YubiKey avant de s'authentifier.
Avec -O resident tu peux récupérer la clé depuis la YubiKey elle-même sur un nouvel équipement, avec ssh-keygen -K. Tu n'as pas besoin de la régénérer à partir de zéro.
Signer tes commits Git avec la même clé
Depuis Git 2.34 tu peux signer les commits en utilisant une clé SSH au lieu de GPG. C'est la même YubiKey, sans configurer un deuxième système de signature.
Exécute git config --global gpg.format ssh.
Exécute git config --global user.signingkey ~/.ssh/id_ed25519_sk.pub.
Exécute git config --global commit.gpgsign true. Chaque commit demandera de toucher la YubiKey.
Dans Settings → SSH and GPG keys → New SSH key, télécharge la même clé publique mais en tant que type Signing Key, pas Authentication Key.
À partir de là, tes commits apparaissent comme Verified sur GitHub. N'importe qui peut vérifier qu'ils proviennent de ta clé physique, pas seulement de ton nom d'utilisateur.
Activer la YubiKey comme 2FA sur GitHub
Settings → Password and authentication → Security keys → Add.
Via USB ou NFC, selon le modèle. GitHub la détecte en tant que clé WebAuthn/FIDO2.
Confirme l'enregistrement. À partir de maintenant, la connexion demandera la clé physique, pas un code temporaire.
GitHub te permet d'ajouter plusieurs clés comme méthode de 2FA. Enregistre une clé principale et une de secours dès le premier jour.
Modèles YubiKey compatibles pour ce flux
| Modèle | Connecteur | SSH (FIDO2) | 2FA GitHub |
|---|---|---|---|
| YubiKey 5 NFC | USB-A + NFC | ✓ | ✓ |
| YubiKey 5C NFC | USB-C + NFC | ✓ | ✓ |
| Security Key NFC | USB-A + NFC | ✓ | ✓ |
| Security Key C NFC | USB-C + NFC | ✓ | ✓ |
Les quatre modèles utilisent le protocole FIDO2 pour générer des clés -sk, donc le flux SSH et le 2FA sur GitHub fonctionnent de la même manière sur tous. La différence réside dans le port physique de ton équipement.
Comment organiser ta clé principale et ta clé de secours
Si tu perds ta seule YubiKey, tu perds l'accès à SSH, à tes commits signés et à la connexion GitHub. Enregistre toujours une deuxième clé et garde-la dans un endroit différent de la principale.
Porte-cartes 2 Emplacements
Porte ta clé principale et ta clé de secours ensemble, au format carte de crédit. Fabriqué en Espagne (UE).
Porte-clés avec Lanyard
Pour la clé que tu utilises quotidiennement. La NFC fonctionne sans la sortir de son étui. Fabriqué en Espagne (UE).
Questions fréquemment posées
Ai-je vraiment besoin de deux YubiKeys ?
Ce n'est pas obligatoire, mais c'est vivement recommandé. Sans une clé de secours enregistrée, une défaillance ou une perte te laisse sans accès à SSH et à ton compte GitHub jusqu'à ce que tu utilises une autre méthode de récupération.
Cela fonctionne-t-il de la même façon sous Windows, macOS et Linux ?
Oui, tant que tu as OpenSSH 8.2 ou supérieur. macOS et les distributions Linux récentes l'incluent par défaut. Sous Windows, utilise le client OpenSSH du système ou WSL.
Puis-je utiliser la même YubiKey pour SSH et pour mon Gmail ?
Oui. Une même YubiKey supporte plusieurs identifiants FIDO2, un pour chaque service où tu l'enregistres — SSH, GitHub, Gmail et autres comptes compatibles WebAuthn.
Que se passe-t-il si je perds la YubiKey que j'ai utilisée pour signer mes commits ?
Les commits déjà signés restent valides. Pour continuer à signer, enregistre la clé de secours en tant que nouvelle Signing Key sur GitHub et mets à jour user.signingkey dans ta configuration Git.
Vaut-il la peine de migrer SSH et GitHub vers YubiKey ?
Si tu travailles avec accès SSH aux serveurs de production ou si tu maintiens des dépôts avec des collaborateurs, oui. La clé privée cesse d'être un fichier copiable et dépend désormais du matériel physique.
Le vrai coût n'est pas celui de la clé, mais celui de ne pas avoir de clé de secours organisée. Résous cela dès le premier jour.
En tant que partenaire Amazon, je perçois une rémunération sur les achats éligibles.