Une paire de clés est bien plus sûre qu'un mot de passe : la clé privée ne quitte jamais votre PC et les robots qui scannent le port 22 ne peuvent pas la deviner. Windows 10 et 11 incluent déjà OpenSSH ; vous allez donc créer une clé, l'installer sur votre VPS Linux Infrawire, la garder chargée dans le service ssh-agent de Windows, puis désactiver les connexions par mot de passe.
📋 Prérequis
- Windows 10 ou 11 avec le client OpenSSH (vérifiez avec
ssh -Vdans PowerShell). - Un VPS Linux (Ubuntu 24.04, Debian 12, AlmaLinux 9 ou Rocky 9) sur lequel vous pouvez encore vous connecter par mot de passe : depuis votre espace client vous retrouvez l'IP et le mot de passe root du VPS.
- Une dizaine de minutes, ainsi qu'une seconde session SSH ou la console du VPS comme filet de sécurité.
PowerShellssh -V
🔐 Générer une clé ed25519
Ouvrez PowerShell (normal, pas administrateur) et lancez :
PowerShellssh-keygen -t ed25519 -C 'USER@my-pc'
Acceptez le chemin par défaut C:\Users\USER\.ssh\id_ed25519 et saisissez une phrase secrète. Elle chiffre la clé privée sur le disque : un fichier volé est inutilisable. Deux fichiers sont créés : id_ed25519 (privé, ne le partagez jamais) et id_ed25519.pub (public).
📤 Copier la clé publique sur le VPS
Windows n'a pas de ssh-copy-id : installez donc la clé à la main. Affichez d'abord la clé publique et copiez la ligne entière :
PowerShellGet-Content $env:USERPROFILE\.ssh\id_ed25519.pub
Connectez-vous avec votre mot de passe, puis ajoutez cette ligne sur le serveur (remplacez le texte d'exemple par votre vraie clé, entre les apostrophes) :
Bashssh root@VPS_IP mkdir -p ~/.ssh && chmod 700 ~/.ssh echo 'ssh-ed25519 AAAA...your-key... USER@my-pc' >> ~/.ssh/authorized_keys sed -i 's/\r$//' ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
La ligne sed retire toute fin de ligne Windows qui rendrait la clé illisible. N'utilisez pas de tube PowerShell vers ssh pour cette opération : Windows PowerShell 5.1 peut ajouter des retours chariot aux données.
🧰 Activer ssh-agent sous Windows
Sans agent, vous devez saisir la phrase secrète à chaque connexion. Le service ssh-agent est installé mais désactivé ou en démarrage manuel par défaut. Dans un PowerShell administrateur :
PowerShellGet-Service ssh-agent | Set-Service -StartupType Automatic Start-Service ssh-agent Get-Service ssh-agent
Puis, dans un PowerShell normal, chargez votre clé une fois et listez les clés chargées :
PowerShellssh-add $env:USERPROFILE\.ssh\id_ed25519 ssh-add -l
L'agent conserve la clé après un redémarrage : on ne vous la redemandera plus.
✅ Tester la connexion par clé
Reconnectez-vous. Vous devez obtenir un shell sans que le serveur demande le mot de passe root :
PowerShellssh root@VPS_IP
Pour voir précisément la méthode utilisée, ajoutez -v et cherchez Server accepts key et Authenticated to ... using publickey :
PowerShellssh -v root@VPS_IP
N'allez pas plus loin tant que cela ne fonctionne pas, et gardez cette session ouverte.
🚫 Désactiver l'authentification par mot de passe sur le serveur
Sous Ubuntu et Debian, /etc/ssh/sshd_config.d/ contient parfois déjà un fichier (comme 50-cloud-init.conf) qui active les mots de passe. SSH retient la première valeur lue : créez donc un fichier qui passe avant. Exécutez ceci en root sur le VPS :
Bashgrep -ri 'PasswordAuthentication' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/ cat > /etc/ssh/sshd_config.d/10-keys-only.conf <<'EOF' PasswordAuthentication no KbdInteractiveAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-password EOF sshd -t && systemctl reload ssh
Sous AlmaLinux/Rocky, le service s'appelle sshd : utilisez systemctl reload sshd. Vérifiez que le sshd_config principal contient bien la ligne Include /etc/ssh/sshd_config.d/*.conf en haut (c'est le cas par défaut). sshd -t n'affiche rien quand la syntaxe est valide.
Depuis une nouvelle fenêtre, vérifiez que les mots de passe sont désormais refusés alors que votre clé fonctionne toujours :
PowerShellssh -o PubkeyAuthentication=no root@VPS_IP
La réponse attendue est Permission denied (publickey).
🛠️ Dépannage
Permission denied (publickey). La clé n'est pas dans l'authorized_keys du bon compte, a été collée sur plusieurs lignes ou les permissions sont incorrectes. Sur le serveur, exécutez chmod 700 ~/.ssh et chmod 600 ~/.ssh/authorized_keys, et vérifiez que la ligne commence par ssh-ed25519.
WARNING: UNPROTECTED PRIVATE KEY FILE. D'autres comptes Windows peuvent lire votre clé privée. Limitez-la à votre utilisateur :
PowerShellicacls $env:USERPROFILE\.ssh\id_ed25519 /inheritance:r /grant:r "${env:USERNAME}:F"
Error connecting to agent: No such file or directory. Le service ssh-agent ne tourne pas ; démarrez-le comme indiqué plus haut.
Accès verrouillé après la modification. Utilisez la console du VPS depuis votre espace client, supprimez /etc/ssh/sshd_config.d/10-keys-only.conf, lancez sshd -t et rechargez le service SSH.
🚀 Votre PC Windows se connecte désormais au VPS avec une clé ed25519 et les mots de passe sont désactivés. Gardez une copie de votre clé privée en lieu sûr.