Générer la clé
ssh-keygen -t ed25519 -C "you@laptop"
Appuyez sur Entrée pour accepter le fichier par défaut. Si une clé existe déjà à cet endroit, saisissez un autre nom, par exemple C:\Users\you\.ssh\id_ed25519_work, au lieu de l'écraser. Le commentaire après -C n'est qu'une étiquette, visible par quiconque voit la clé publique.
Si PowerShell indique que ssh-keygen n'est pas reconnu, le client OpenSSH est absent. Installez-le depuis un PowerShell élevé :
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Ed25519 est aujourd'hui le bon choix par défaut. Pour les différences, voir clés SSH RSA ou ed25519.
Choisir une phrase secrète
La phrase secrète chiffre le fichier de la clé privée : une copie du fichier ne suffit donc pas à l'utiliser. Définissez-en une, sauf si la clé sert à une tâche sans surveillance. Vous pouvez la changer plus tard sans changer la clé :
ssh-keygen -p -f $env:USERPROFILE\.ssh\id_ed25519
Utiliser ssh-agent pour ne la saisir qu'une fois
Le service d'agent est désactivé par défaut. Activez-le une fois, dans un PowerShell élevé :
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
Ensuite, dans un PowerShell normal, sous votre propre utilisateur :
ssh-add $env:USERPROFILE\.ssh\id_ed25519
ssh-add -l
La seconde commande liste les clés chargées. Si ssh-add indique qu'il ne peut pas se connecter à l'agent, le service ne tourne pas : voir Could not open a connection to your authentication agent.
Si Git demande encore la phrase secrète
Git for Windows peut utiliser son propre SSH intégré, qui ne peut pas joindre l'agent Windows. La documentation de GitHub donne cette solution :
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
Copier la clé publique
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard
Collez-la maintenant là où il le faut : sur GitHub, ou sur un serveur avec l'équivalent PowerShell de ssh-copy-id.
Permissions des fichiers
ssh refuse une clé privée que d'autres utilisateurs peuvent lire, avec le message UNPROTECTED PRIVATE KEY FILE. Les clés générées dans votre propre dossier .ssh ont les bonnes permissions. Le problème apparaît en général quand une clé est copiée d'ailleurs. Voir la solution pour cette erreur.
Sauvegarder la clé, ou non
Le fichier de la clé privée est l'unique exemplaire. Si vous le perdez, vous en créez une nouvelle et remplacez la clé publique sur chaque serveur, ce qui est souvent plus simple que de conserver une sauvegarde. Si vous en gardez une, gardez-la chiffrée.
Une façon de le faire : un gestionnaire de clés SSH avec coffre chiffré.
Questions
Où ssh-keygen enregistre-t-il la clé sous Windows ?
Dans C:\Users\you\.ssh. id_ed25519 est la clé privée et id_ed25519.pub la clé publique. Seul le fichier .pub va sur les serveurs et sur GitHub.
Faut-il un logiciel en plus pour créer une clé SSH sous Windows ?
Non. Windows 10 et 11 intègrent le client OpenSSH, donc ssh-keygen fonctionne dans PowerShell. S'il manque, ajoutez la fonctionnalité OpenSSH.Client.
Comment changer la phrase de passe plus tard ?
Lancez ssh-keygen -p -f avec le chemin de la clé privée. La clé reste la même, rien ne change donc sur vos serveurs.
Sources
- Authentification par clé dans OpenSSH pour Windows, Microsoft Learn
- Prise en main d'OpenSSH pour Windows, Microsoft Learn
- Générer une nouvelle clé SSH, GitHub Docs
- ssh-keygen(1), manuel OpenBSD