Wer einen Linux-Server administriert, nutzt in vielen Fällen SSH zur sicheren Kommunikation. Unter Windows war dies bis zuletzt nur durch Installation zusätzlicher Software möglich. Windows 11 und Windows Server 2025 bringen jedoch Unterstützung für SSH von Hause aus mit. Dieser Blog-Artikel zeigt Euch, wie Ihr SSH unter Windows nutzen könnt.
Einführung
Secure Shell (SSH) ist ein Netzwerkprotokoll zum sicheren Fernsteuern von Netzwerkdiensten über ein unsicheres Netzwerk (z.B. das Internet). Typische Applikationen, die SSH unterstützen, sind Kommandozeilenwerkzeuge (z.B. Putty) sowie spezielle Administrationswerkzeuge (z.B. pgAdmin). SSH ist für viele Administratoren der präferierte Weg zum Fernsteuern von Linux-Computern. Da ein Linux-Server in der Regel keine GUI besitzt, muss mit der Kommandozeile gearbeitet werden, SSH verlagert die Eingabe und Ausgabe dabei auf Deinen lokalen Rechner.
Mit Windows 11 kann per Kommandozeile eine SSH-Verbindung zu einem entfernten SSH-Server aufgebaut werden. Parallel zu Windows 11 hat auch der Windows Server 2025 einen SSH-Serverdienst spendiert bekommen, so dass eine Fernwartung in einer modernen Windows-Umgebung komplett per SSH erfolgen kann.
Windows 11 bzw. 2025 nutzen eine spezielle Version von OpenSSH. OpenSSH ist eine Sammlung von Server- und Client-Komponenten zum Aufbau einer SSH-Infrastruktur.
OpenSSH hat seine Wurzeln in der Unix-Welt und war bis vor kurzem nicht kompatibel mit Windows. Microsoft entwickelt deshalb mit Portable OpenSSH eine an Windows angepasste Version von OpenSSH, die auf einem Fork des Originalquellcodes basiert. Das langfristige Ziel ist, den Code mit der offiziellen Version wieder zu vereinigen.
OpenSSH-Server installieren
Standardmäßig ist OpenSSH ab Windows Server 2025 bereits installiert.
-
Öffne die PowerShell-Konsole als Administrator und gibt folgenden Befehl ein:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
Es sollte folgende Ausgabe erscheinen:
Name : OpenSSH.Server~~~~0.0.1.0 State : Installed
Bei Misserfolg kannst Du den OpenSSH-Server wie folgt nachinstallieren:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
-
Wenn Du wissen willst, welche OpenSSH-Version genau installiert ist, tippe folgendes ein:
sshd -V
-
Standardmäßig ist der SSH-Dienst (sshd) deaktiviert. Um Ihn zum Laufen zu bringen, musst Du ihn starten:
Start-Service sshd
Damit er auch einen Serverneustart überlebt, musst Du den Starttyp des Diensts auf “Automatisch” setzen
Set-Service -Name sshd -StartupType 'Automatic'
-
Will Du überprüfen, ob der OpenSSH-Dienst läuft? Voià:
Get-Service sshd
Dein Windows Server 2025 ist jetzt bereit und kann auf SSH-Anfragen antworten. Bitte achte darauf, dass bei Einsatz einer externen Firewall der TCP-Port 22
freigeschaltet ist.
Noch ein letzter PowerShell-Befehl:
Get-ChildItem c:\ProgramData\ssh\ssh_host_*_key | ForEach-Object { ssh-keygen -l -f $_ }
Dir werden jetzt alle öffentlichen Key Fingerprints (Schlüssel-Fingerabdrücke) des OpenSSH-Servers aufgelistet.
Beim Erstzugriff eines OpenSSH-Clients wird Dir ebenfalls ein Key Fingerprint angezeigt, und Du wirst gefragt, ob es sich beim angefragten Computer auch wirklich um den gewünschten SSH-Server handelt. Um diese Frage zu beantworten, muss der ausgewiesene Key Fingerprint mit einem der hier aufgelisteten Key Fingerprints übereinstimmen.
Natürlich kann man SSH unter Windows 2025 weiter konfigurieren. Weitere Infos in der Manpage für sshd_config.
OpenSSH-Server aktualisieren
Die standardmäßige Installation von OpenSSH unter Windows Server 2025 ist auf den ersten Blick eine feine Sache. Allerdings stellt man schnell fest, dass über das normale Windows-Update keine regelmäßigen Updates von OpenSSH eingespielt werden (Stand Oktober 2025).
Seit Version 8.9.1.0 kann man OpenSSH auch bequem via WinGet installieren. Das machen wir uns zu Nutze und schauen zunächst, welche Version uns denn zur Verfügung steht:
winget search Microsoft.OpenSSH
Ist die Version wesentlich neuer, lohnt es sich zu Aktualisieren (eigentlich lohnt es sich immer). Bevor wir dies jedoch tun, müssen wir die Standardinstallation von OpenSSH herunterschmeißen. Leider verträgt die sich nicht mit der WinGet-Variante.
Also weg damit:
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Und gleich danach neu via WinGet:
winget install Microsoft.OpenSSH.Preview
Und jetzt noch die uns bereits bekannte Befehlssequenz und fertig:
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
Zum Konfigurieren der Windows-Firewall führe folgenden Befehl aus:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Sollte Windows Server den Dienst sshd nicht finden, dann ist sehr wahrscheinlich die PATH-Umgebungsvariable nicht aktualisiert worden. Dort muss der Installationspfad C:\Program Files\OpenSSH
drin stehen. Außerdem lohnt es sich u.U. die PowerShell einmal zu schließen und anschließend wieder zu öffnen.
Zukünftige Updates von OpenSSH können jetzt bequem mit WinGet eingespielt werden:
winget upgrade Microsoft.OpenSSH.Preview
OpenSSH-Client unter Windows 11
Der OpenSSH-Client unter Windows 11 ist standardmäßig installiert und kann sofort genutzt werden. Genau das machen wir jetzt auch und versuchen unseren soeben konfigurierten Windows Server per SSH zu erreichen.
Wir gehen dabei von folgender Konfiguration aus (alles nur Beispieldaten, die es real so nicht gibt):
Server:
- DNS-Name: myserver.beispiel.de
- Benutzername des Administrators: frank
Client:
- DNS-Name: myhost
- Benutzername: frank
Authentifizierung mit Kennwort
Öffne auf Deinem Windows 11-Rechner die Windows-Kommandozeile und tippe folgendes ein:
ssh frank@myserver.beispiel.de
Beim ersten Start wird der Key Fingerprint des Servers angezeigt, und Du wirst gefragt, ob Du dich wirklich mit diesem Server verbinden möchtest.
The authenticity of host 'myserver.beispiel.de (159.69.60.4)' can't be established.
ECDSA key fingerprint is SHA256:CxIuAEc3SZThY9XobrjJIHN61OTItAU0Emz0v/+15wY.
Are you sure you want to continue connecting (yes/no)?
Du solltest zunächst überprüfen, ob der angezeigte Key Fingerprint auch wirklich von Deinem Server stammt (siehe vorherigen Abschnitt). Bestätige anschließend mit yes
und der Server wird in die lokale Liste der bekannten Rechner eingetragen. Diese Abfrage siehst Du nur beim aller ersten Zugriff auf Deinen Windows Server.
Anschließend wirst Du nach dem Kennwort des Benutzers frank
auf dem Server myserver.beispiel.de
gefragt. Tippe es ein und Du hast Fernzugriff auf Deinen Server.
Der OpenSSH-Client speichert die Liste der bekannten Rechner (Known Hosts) in einer Textdatei. Du kannst Sie Dir mit folgendem Befehl anzeigen lassen:
notepad "%USERPROFILE%\.ssh\known_hosts"
Authentifizierung mit SSH-Schlüssel
Hierbei musst Du einmalig ein Schlüsselpaar mit einem privaten und einem öffentlichen Schlüssel generieren. Der öffentliche Schlüssel wird auf dem SSH-Server hinterlegt, der private Schlüssel bleibt auf Deinem lokalen Rechner. Die Authentifizierung erfolgt nun durch das Versenden eines mit dem öffentlichen Schlüssel kodierten Datenpakets vom SSH-Server zum SSH-Client, der dieses mit seinem privaten Schlüssel wieder dekodieren muss. Ist die Dekodierung erfolgreich, bist Du authentifiziert.
Ein Schlüsselpaar erzeugen
Öffne auf Deinem Windows 11-Rechner die Windows-Kommandozeile und tippe folgendes ein:
cd %USERPROFILE%\.ssh\
ssh-keygen -t ed25519
Du bekommst folgende Meldung angezeigt:
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\frank/.ssh/id_ed25519):
Bestätige mit der Eingabetaste
.
Jetzt wirst Du gefragt, ob Du ein Kennwort zum Absichern Deines privaten Schlüssels definieren möchtest. Dies ist dringend zu empfehlen.
Enter passphrase (empty for no passphrase):
Das einmal eingegebene Kennwort musst Du zur Sicherheit noch einmal wiederholen:
Enter same passphrase again:
Jetzt wird ein neues Schlüsselpaar generiert und eine Meldung wie diese erscheint in Deiner Kommandozeile:
Your identification has been saved in C:\Users\frank/.ssh/id_ed25519.
Your public key has been saved in C:\Users\frank/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:7KMZvJiITZ+HbOyqjNPV5AeC5As2GSZES5baxy1NIe4 myhost@Frank
The key's randomart image is:
+--[ED25519 256]--+
|E ..o=*o.+o |
|. .oo+oo... |
|.... o=.. |
| o+. o = |
|o .oo ooS. |
|* ...+o oo |
|oo.. o+o+o |
| . o+o+o |
| .o.. |
+----[SHA256]-----+
Die Meldung bedeutet, dass in der Datei C:\Users\frank\.ssh\id_ed25519
der private Schlüssel und in der Datei C:\Users\frank\.ssh\id_ed25519.pub
der öffentliche Schlüssel gespeichert wurde.
Den öffentlichen Schlüssel für Administratoren verteilen
Der private Schlüssel ist privat und darf unter keinen Umständen veröffentlicht werden. Der öffentliche Schlüssel muss jedoch dem Windows Server bekanntgemacht werden. Als Server-Administrator musst Du die Datei
%USERPROFILE%\.ssh\id_ed25519.pub
von Deinem lokalen Windows 11-Computer kopieren und auf dem Windows Server unter dem neuen Pfad
c:\ProgramData\ssh\administrators_authorized_keys
ablegen (Achtung: Zieldatei hat keine Dateiendung).
Ganz wichtig ist, der Datei administrators_authorized_keys
die passenden Zugriffsrechte zu erteilen. Dazu die PowerShell-Konsole als Administrator öffnen und folgende Befehlssequenz ausführen:
$acl = Get-Acl C:\ProgramData\ssh\administrators_authorized_keys
$acl.SetAccessRuleProtection($true, $false)
$administratorsRule = New-Object system.security.accesscontrol.filesystemaccessrule("Administrators","FullControl","Allow")
$systemRule = New-Object system.security.accesscontrol.filesystemaccessrule("SYSTEM","FullControl","Allow")
$acl.SetAccessRule($administratorsRule)
$acl.SetAccessRule($systemRule)
$acl | Set-Acl
Diese Befehle haben folgende Bedeutung: Zunächst werden die Zugriffsregeln der Datei vor Vererbung geschützt, anschließend werden der Administratoren-Gruppe sowie dem lokalen Systemkonto volles Zugriffsrecht auf die Datei gewährt. Standardbenutzer haben also keinen Zugriff (siehe nächsten Abschnitt).
Sollte die Datei administrators_authorized_keys
schon existieren, musst Du den Inhalt aus id_ed25519.pub
als neue Zeile in diese Datei anfügen
Bei einer Authentifizierung per SSH-Schlüssel sollte die Authentifizierung per Kennwort unterbunden werden. Andernfalls läuft der sicherheitstechnische Vorteil des SSH-Schlüssels ins Leere. Öffne dazu die folgende Datei in einem Texteditor Deiner Wahl:
C:\ProgramData\ssh\sshd_config
Dort ändere die Zeile
# PasswordAuthentication yes
ab in
PasswordAuthentication no
Speichere die Konfigurationsdatei und starte den OpenSSH-Serverdienst neu. Tippe dazu in der PowerShell-Konsole folgenden Befehl ein:
Restart-Service sshd
Den öffentlichen Schlüssel für Standardbenutzer verteilen
Für Standardbenutzer unter Windows Server 2025 gilt im Wesentlichen das gleiche wie für Mitglieder der Administratorengruppe, nur dass der öffentliche Schlüssel woanders abgelegt werden muss. Als Standardbenutzer musst Du die Datei
%USERPROFILE%\.ssh\id_ed25519.pub
von Deinem lokalen Windows 11-Computer kopieren und auf dem Windows Server unter dem neuen Pfad
%USERPROFILE%\.ssh\authorized_keys
ablegen (Achtung: Zieldatei hat keine Dateiendung). Existiert das Verzeichnis C:\Users\frank\.ssh
nicht, musst Du es zunächst anlegen:
New-Item -ItemType directory -Path %USERPROFILE%\.ssh
Testen
Öffne auf Deinem Windows 11-Rechner die Windows-Kommandozeile und tippe folgendes ein:
ssh frank@myserver.beispiel.de
Du wirst nun nach dem Kennwort Deines privaten Schlüssels gefragt.
Enter passphrase for key 'C:\Users\frank/.ssh/id_ed25519':
Tippe es ein, und Du hast Fernzugriff auf Deinen Server.
Kennwort oder SSH Schlüssel?
Die meisten Tutorials empfehlen den SSH-Schlüssel als sicherste Alternative. Bei dieser Methode verlässt der SSH-Schlüssel nicht Deinen Rechner, kann also weder abgefangen noch durch einen Brute-Force-Angriff erraten werden. Dies setzt allerdings voraus, dass Dein Client-Computer abgesichert ist und auch bei einem Diebstahl nicht sofort geknackt werden kann, denn der private SSH-Schlüssel ist dort dauerhaft gespeichert. Es wird daher dringend empfohlen, den privaten SSH-Schlüssel mit einem starken Kennwort zu schützen.
SFTP
Bei der Arbeit mittels SSH kommt man schnell zu dem Punkt, wo man sich einen grafischen Datei-Manager wünscht. Genau hier kommt ein weiteres Netzwerkprotokoll ins Spiel: Das Secure File Transfer Protocol (kurz SFTP).
SFTP dient zur sicheren Dateiübertragung über SSH und wird von den gängigen Datei-Managern unter Windows unterstützt. Zwei wunderbare Open-Source-Beispiele wären:
Eine Installation auf Serverseite ist nicht nötig. SFTP ist durch die Installation von OpenSSH unter Windows Server 2025 bereits freigeschaltet und kann sofort genutzt werden.
Wenn Du es genauer wissen möchtest, kannst Du noch einmal einen Blick in die SSH-Konfigurationsdatei C:\ProgramData\ssh\sshd_config
werfen. Dort findest Du folgenden Eintrag:
# override default of no subsystems
Subsystem sftp sftp-server.exe
Natürlich kann man auch SFTP unter Windows Server 2025 weiter konfigurieren. Weitere Infos in der Manpage für sshd_config.
PowerShell-Remoting
PowerShell-Remoting ermöglicht, Befehle und Skripte auf entfernten Systemen auszuführen.
Normalerweise nutzt Windows dafür WinRM (unter HTTP/HTTPS). Seit PowerShell 7 gibt es aber die Option, den Transport über SSH laufen zu lassen. Die Vorteile sind:
- Kein Einsatz von WinRM mehr nötig
- Kommunikation über SSH-Port 22/TCP
- Authentifizierung mittels SSH-Schlüssel
- Plattformübergreifend nutzbar
Die Voraussetzungen dafür sind:
-
Du musst PowerShell 7 auf Client und Server installiert haben. Das geht wieder am Einfachsten mittels WinGet:
winget install --id Microsoft.PowerShell
-
In der Konfigurationsdatei
sshd_config
musst Du den Subsystem-Eintrag ergänzen:# override default of no subsystems Subsystem sftp sftp-server.exe Subsystem powershell "C:\Program Files\PowerShell\7\pwsh.exe" -sshs -NoLogo -NoProfile
Anschließend den OpenSSH-Serverdienst neu starten:
Restart-Service sshd
Jetzt kannst Du von Deinem Windows 11-Rechner das PowerShell-Remoting wie folgt starten (Wichtig: Du musst das zwingend mit PowerShell 7 machen):
Enter-PSSession -HostName myserver.beispiel.de -UserName frank -SSHTransport -KeyFilePath "$env:USERPROFILE\.ssh\id_ed25519"
Artikelhistorie
- 12.11.2019
- Erstveröffentlichung
- 05.02.2021
- Komplette Überarbeitung des Artikels
- 07.10.2025
- Update auf Windows Server 2025
- Neuer Abschnitt zu PowerShell-Remoting