Windows Server 2022 liefert OpenSSH Server als optionales Feature mit: kein Fremd-Installer, Updates über Windows Update. Ist es aktiv, können Sie PowerShell über SSH ausführen, Dateien mit scp kopieren und Skripte oder CI auf den Server richten wie auf jede Linux-Maschine.
Alles unten haben wir auf unserem Windows-Server-2022-Image in einer PowerShell mit Administratorrechten über RDP gemacht (so verbinden Sie sich).
Zuerst das Netzwerk. Auf einem Windows-Tarif mit NAT geht die einzige eingehende Weiterleitung auf RDP, daher ist SSH aus dem Internet nicht erreichbar. Für SSH von außen brauchen Sie einen Tarif mit eigener IPv4, etwa Windows Small-IP. Ist der Port erreichbar, dauern die Schritte unten etwa fünf Minuten.
1. OpenSSH Server installieren
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Der Client ist schon installiert; der Server zeigt NotPresent, bis Sie ihn hinzufügen. Auf unserem Server dauerte die Installation 28 Sekunden.
2. Starten und beim Booten starten lassen
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
Die Installation des Features legt die Firewall-Regel OpenSSH-Server-In-TCP an (Port 22, eingehend, erlaubt), Sie müssen also keine eigene hinzufügen.
3. PowerShell zur Standard-Shell machen
Standardmäßig landet eine SSH-Sitzung in cmd.exe. Auf PowerShell umstellen:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Neue Verbindungen bekommen sofort PowerShell 5.1, ein Neustart ist nicht nötig.
4. Schlüssel für Administrator: die Datei, an der alle scheitern
Das ist die erste Windows-Falle. Für Konten in der Gruppe Administrators liest sshd C:\Users\<name>\.ssh\authorized_keys nicht. Es liest eine gemeinsame Datei, C:\ProgramData\ssh\administrators_authorized_keys, und nur, wenn niemand außer Administrators und SYSTEM darin schreiben kann:
$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"
Auch -Encoding ascii zählt. In unserem Test wurde derselbe Schlüssel, mit Out-File gespeichert (UTF-16, Standard von PowerShell 5.1), mit Permission denied (publickey) abgelehnt. Von Ihrem Rechner aus:
ssh Administrator@YOUR.SERVER.IP
Sie sollten ohne Passwort eine PowerShell-Eingabeaufforderung bekommen. Für Benutzer ohne Adminrechte funktioniert das übliche C:\Users\<name>\.ssh\authorized_keys.
5. Passwort-Login abschalten: die zweite Falle
Die naheliegende Änderung PasswordAuthentication no reicht in dieser Version nicht. OpenSSH 8.1 bietet weiterhin keyboard-interactive an, das dasselbe Windows-Passwort abfragt. In unserem Test zeigte ein Login ohne Schlüssel weiter keyboard-interactive, bis wir auch das abgeschaltet hatten. Außerdem muss die Einstellung vor dem Block Match Group administrators am Dateiende stehen, sonst gilt sie nur für Admins. Dies setzt beide Zeilen an den Anfang:
$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
Lassen Sie die aktuelle SSH-Sitzung offen und testen Sie aus einem zweiten Terminal. Ein Versuch nur mit Passwort sollte jetzt ergeben:
Permission denied (publickey).
So war es in unserem Test für Administrator und für einen normalen Benutzer, während der Schlüssel-Login weiter funktionierte.
Was Sie damit tun können
- Einen Befehl von überall ausführen:
ssh Administrator@IP 'Get-Service sshd'. - Dateien kopieren:
scp .\app.zip Administrator@IP:C:/apps/. - Den Port auf Ihre Adresse beschränken, genau wie bei RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
Welcher Tarif
SSH von außen braucht eine öffentliche IPv4: Windows Small-IP (4 vCPU, 4 GB, 50 GB) kostet $28/Monat, Windows Medium-IP (6 vCPU, 6 GB) $36/Monat. Windows ist Server 2022 mit Ihrer eigenen Lizenz (BYOL erklärt). Alle vier Tarife auf der Windows-VPS-Seite. Damit ein Programm nach dem Trennen weiterläuft, siehe Skript 24/7 auf Windows Server.
Kommentare
Noch keine Kommentare. Sei der Erste.