−25%

sur Windows en paiement annuel, jusqu'au 31/10. Voir les offres

EQVPS
Commencer

Installer OpenSSH Server sur Windows Server 2022 (connexion par clé, shell PowerShell)

Installez l'OpenSSH Server intégré sur un VPS Windows Server 2022, faites de PowerShell le shell par défaut, connectez-vous par clé en Administrator et coupez la connexion par mot de passe. Avec les deux pièges propres à Windows qui font échouer la connexion par clé.

Windows Server 2022 fournit OpenSSH Server comme fonctionnalité facultative : pas d'installeur tiers, mises à jour via Windows Update. Une fois activé, vous pouvez lancer PowerShell par SSH, copier des fichiers avec scp et brancher scripts ou CI sur le serveur comme sur n'importe quelle machine Linux.

Tout ce qui suit a été fait sur notre image Windows Server 2022, dans un PowerShell élevé via RDP (comment se connecter).

D'abord, le réseau. Sur une offre Windows NAT, la seule redirection entrante va vers RDP : SSH n'est donc pas joignable depuis Internet. Pour SSH depuis l'extérieur, il faut une offre avec sa propre IPv4, comme Windows Small-IP. Une fois le port joignable, les étapes prennent environ cinq minutes.

1. Installer OpenSSH Server

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Le client est déjà installé ; le serveur indique NotPresent tant que vous ne l'ajoutez pas. Sur notre serveur, l'installation a pris 28 secondes.

2. Le démarrer et le lancer au démarrage

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*

L'installation de la fonctionnalité crée la règle de pare-feu OpenSSH-Server-In-TCP (port 22, entrant, autorisé) : inutile d'en ajouter une.

3. Faire de PowerShell le shell par défaut

Par défaut, une session SSH arrive dans cmd.exe. Passez à PowerShell :

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Les nouvelles connexions obtiennent PowerShell 5.1 tout de suite, sans redémarrage.

4. Ajouter votre clé pour Administrator : le fichier qui piège tout le monde

C'est le premier piège propre à Windows. Pour les comptes du groupe Administrators, sshd ne lit pas C:\Users\<name>\.ssh\authorized_keys. Il lit un fichier partagé, C:\ProgramData\ssh\administrators_authorized_keys, et seulement si personne d'autre qu'Administrators et SYSTEM ne peut y écrire :

$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

-Encoding ascii compte aussi. Dans notre test, la même clé enregistrée avec Out-File (UTF-16, la valeur par défaut de PowerShell 5.1) a été refusée avec Permission denied (publickey). Depuis votre machine :

ssh Administrator@YOUR.SERVER.IP

Vous devriez obtenir une invite PowerShell sans mot de passe. Pour les utilisateurs non administrateurs, le C:\Users\<name>\.ssh\authorized_keys habituel fonctionne.

5. Couper la connexion par mot de passe : le second piège

La modification évidente, PasswordAuthentication no, ne suffit pas sur cette version. OpenSSH 8.1 propose encore keyboard-interactive, qui demande le même mot de passe Windows. Dans notre test, une connexion sans clé affichait toujours keyboard-interactive jusqu'à ce que nous le coupions aussi. Et le réglage doit se trouver avant le bloc Match Group administrators en fin de fichier, sinon il ne s'applique qu'aux administrateurs. Ceci place les deux lignes en tête :

$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd

Gardez votre session SSH actuelle ouverte et testez depuis un second terminal. Un essai avec mot de passe seul doit maintenant recevoir :

Permission denied (publickey).

C'est ce que nous avons obtenu pour Administrator comme pour un utilisateur normal, tandis que la connexion par clé continuait de fonctionner.

Ce que vous pouvez en faire

  • Lancer une commande de n'importe où : ssh Administrator@IP 'Get-Service sshd'.
  • Copier des fichiers : scp .\app.zip Administrator@IP:C:/apps/.
  • Limiter le port à votre adresse, comme pour RDP : Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.

Quelle offre

SSH depuis l'extérieur demande une IPv4 publique : Windows Small-IP (4 vCPU, 4 Go, 50 Go) coûte $28/mois, Windows Medium-IP (6 vCPU, 6 Go) $36/mois. Windows est Server 2022 avec votre propre licence (le BYOL expliqué). Les quatre offres sont sur la page Windows VPS. Pour qu'un programme continue de tourner après la déconnexion, voir exécuter un script 24/7 sur Windows Server.

FAQ

Pourquoi SSH sous Windows alors qu'il y a RDP ?

Les scripts et les outils parlent SSH. Avec OpenSSH sur le serveur, vous lancez des commandes PowerShell depuis une machine Linux ou un job de CI, copiez des fichiers avec scp et laissez l'automatisation gérer le serveur sans session de bureau.

Ma clé marche pour un utilisateur normal mais pas pour Administrator. Pourquoi ?

Pour les membres du groupe Administrators, OpenSSH sous Windows ignore ~/.ssh/authorized_keys et lit C:\ProgramData\ssh\administrators_authorized_keys. Ce fichier ne doit être modifiable que par Administrators et SYSTEM, sinon sshd l'ignore sans prévenir.

Puis-je joindre SSH sur une offre Windows NAT ?

Pas depuis l'extérieur. Sur une offre Windows NAT, le port externe personnel est redirigé vers RDP (3389), et c'est la seule redirection entrante. Pour SSH depuis Internet, prenez une offre Windows avec sa propre IPv4. Dans le serveur, OpenSSH fonctionne quand même pour les outils locaux.

Quelle version d'OpenSSH Windows Server 2022 installe-t-il ?

OpenSSH 8.1p1 for Windows. C'est pourquoi les réglages de mot de passe utilisent ChallengeResponseAuthentication et non le nom plus récent KbdInteractiveAuthentication.

Commentaires

Pas encore de commentaires. Soyez le premier.

Laisser un commentaire

Les commentaires sont modérés avant leur publication.