Configurer une connexion SSH par clefs vers un serveur Windows 2022/2025

La configuration d'un serveur OpenSSH sous Windows est quelque peu déroutante au début.
Voici donc comment configurer proprement une connexion SSH par clefs vers un serveur Windows.

Nous allons ici prendre pour exemple 2 ordinateurs :
- Un client Windows 11 IP : 192.168.10.194
- Un serveur Windows 2025 en Core (histoire de voir que ça n'a rien de complexe !) : IP : 192.168.10.190

Nous allons nous concentrer sur la connexion par clefs à l'utilisateur Administrateur sur le serveur Windows.


Sur le serveur Windows (192.168.10.190)

1. Installer et configurer OpenSSH Server

En mode Server Core, depuis une invite PowerShell ouvert en tant qu'Administrateur :

# Installer le serveur OpenSSH est automatiser le démarrage du service.
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' | Add-WindowsCapability -Online
Set-Service -Name sshd -StartupType 'Automatic'

# Créer une règle de pare-feu pour autoriser les connexions SSH entrantes :
New-NetFirewallRule -Name "OpenSSH-Inbound" -DisplayName "OpenSSH-Inbound" -Protocol TCP -Direction Inbound -Action Allow -LocalPort 22

# Démarrer le service sshd immédiatement
Start-Service sshd

# Vérifier le statut
Get-Service sshd

Sur le client (192.168.10.194)

1. Installer OpenSSH Client (déjà installé par défaut sur Windows 11, mais à vérifier)

Depuis une invite PowerShell :

# Vérification rapide
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Client*'

# Si non installé, l'installer :
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Générer une paire de clés SSH sur le client

Depuis PowerShell sur le client :

# Générer une paire de clés SSH (algorithme Ed25519 recommandé)
ssh-keygen -t ed25519

Quand demandé :

Résultat :

Votre clé privée est : C:\Users\<Nom>\.ssh\id_ed25519

Votre clé publique est : C:\Users\<Nom>\.ssh\id_ed25519.pub


Copier la clé publique sur le serveur Windows

Puisque le serveur Windows est en Core, nous allons copier la clé publique par SSH en demandant temporairement une connexion par mot de passe.

Voici comment faire depuis le client :

🔑 Copie sécurisée de la clé publique via SSH vers le serveur :

# Récupèrer la clé publique
$authorizedKey = Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub"

# Préparer la commande distante pour ajouter la clé publique dans le fichier administrateur
$remotePowershell = @"
powershell -Command `"Add-Content -Force -Path C:\ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey'; icacls.exe C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant Administrateurs:F /grant SYSTEM:F`"
"@

# Connexion initiale avec mot de passe administrateur pour exécuter la commande
ssh Administrateur@192.168.10.190 $remotePowershell

Lors de la première connexion SSH, accepter l'empreinte (fingerprint) en tapant yes et fournir le mot de passe du compte Administrateur du serveur Windows quand demandé.

⚠️ Attention !! :

# SID universel pour les administrateurs
$remotePowershell = @"
powershell -Command `"Add-Content -Force -Path C:\ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey'; icacls.exe C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant *S-1-5-32-544:F /grant SYSTEM:F`"
"@

Démarrer l'agent SSH sur le client et charger la clé privée (optionnel mais conseillé)

Sur le client (PowerShell en mode Administrateur) :

# Activer ssh-agent
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent

# Charger la clé privée
ssh-add "$env:USERPROFILE\.ssh\id_ed25519"

⚠️ Pour une sécurité maximale :
Après avoir chargé la clé privée dans l'agent, la copier sur un support sécurisé externe puis la supprimer de l'ordinateur local.


Conclusion

La connexion par clé publique est désormais configurée.


⬆️ Retour en haut de la page