So richten Sie einen SFTP-Server unter Windows mit OpenSSH ein
Diese Anleitung gilt für Windows Server 2019, 2022 und 2025, bei denen der OpenSSH-Server als integrierte optionale Funktion enthalten ist. Ein Download von Drittanbietern ist nicht erforderlich.
Schritt-für-Schritt-Anleitung
Installieren der OpenSSH-Server-Funktion
1. Starten Sie PowerShell als Administrator: „Start“, geben Sie „PowerShell“ ein → klicken Sie mit der rechten Maustaste auf„PowerShell“ → „Als Administrator ausführen“.
2. Überprüfen Sie, ob die OpenSSH-Server-Funktion bereits installiert ist:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Hier werden sowohl „OpenSSH.Client“ als auch „OpenSSH.Server“ aufgeführt . Achten Sie darauf, speziell den Status von „OpenSSH.Server“ zu überprüfen; die Client-Komponente ist möglicherweise bereits installiert und wird in dieser Anleitung nicht behandelt.
Wenn „OpenSSH.Server“ den Status „NotPresent“ anzeigt, installieren Sie die Funktion:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Windows installiert die integrierte OpenSSH-Server-Funktion unter „C:\Windows\System32\OpenSSH\“. Installieren Sie OpenSSH nicht manuell direkt unter „C:\Windows“ – dies verstößt gegen die Verzeichniskonventionen von Windows und kann zu Berechtigungsproblemen führen.
3. Starten Sie den sshd-Dienst und richten Sie ihn so ein, dass er automatisch gestartet wird:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4. Überprüfen Sie, ob der Dienst läuft:
Get-Service sshd

Im Feld „Status“ sollte „Running“ angezeigt werden. Um zu überprüfen, ob der Starttyp auf „Automatisch“ gesetzt ist:
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

5. Überprüfen Sie den Speicherort der installierten OpenSSH-Binärdatei und die Versionsinformationen:
Get-Command sshd | Select-Object Source (Get-Command sshd).FileVersionInfo

Das Feld „Quelle“ bestätigt, dass der Installationspfad mit „C:\Windows\System32\OpenSSH\sshd.exe“ übereinstimmt ; „FileVersionInfo“ zeigt die OpenSSH-Version an (z. B. „OpenSSH_8.1p1“, „FileVersion 8.1.0.1“ unter Windows Server 2022).
Öffnen des Firewall-Ports
Standardmäßig wird bei der Installation der OpenSSH-Server-Funktion normalerweise automatisch eine eingehende Firewall-Regel mit dem Namen „OpenSSH-Server-In-TCP“ erstellt. Überprüfen Sie, ob diese vorhanden und aktiviert ist:
Get-NetFirewallRule -Name *OpenSSH-Server*

Falls die Regel fehlt, erstellen Sie sie manuell (beachten Sie den abweichenden Regelnamen; diese manuell erstellte Regel ist unabhängig von der automatisch generierten Regel „OpenSSH-Server-In-TCP“ ):
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Überprüfen Sie, ob der Port tatsächlich offen ist und auf Verbindungen wartet:
Test-NetConnection -ComputerName localhost -Port 22

Ein Ergebnis „TcpTestSucceeded : True“ bestätigt, dass der Dienst lokal empfangsbereit ist. Dies bestätigt jedoch nicht, dass die Firewall Datenverkehr von außen durchlässt. Um dies vollständig zu überprüfen, führen Sie denselben Befehl von einem anderen Rechner im Netzwerk aus und ersetzen Sie dabei „localhost“ durch die IP-Adresse des Servers.
Konfiguration von „sshd_config“ für SFTP
Die Konfigurationsdatei befindet sich unter:
C:\ProgramData\ssh\sshd_config
Öffnen Sie sie in einem Texteditor mit Administratorrechten (z. B. „Notepad“ als Administrator ausführen) und stellen Sie sicher, dass die folgenden Einstellungen vorhanden sind (bzw. nach Bedarf konfiguriert wurden):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

„PasswordAuthentication yes“ wird hier zur Vereinfachung dieser Anleitung angezeigt, aber für einen Produktionsserver, der mit dem Internet verbunden ist, ist die schlüsselbasierte Authentifizierung mit „PasswordAuthentication no“ die sicherere Wahl. Siehe die optionale Einstellung „AuthorizedKeysFile“ weiter unten, wenn Sie die schlüsselbasierte Authentifizierung verwenden möchten.
Die Zeile „Subsystem sftp“ legt fest, welche Binärdatei SFTP-Sitzungen verarbeitet. Wenn diese Zeile nicht vorhanden oder auskommentiert ist, funktionieren SSH-Verbindungen zwar, aber die SFTP-Dateiübertragung schlägt fehl.
Standardmäßig ist diese Zeile in der Konfigurationsdatei der integrierten Funktion bereits vorhanden und nicht auskommentiert. Falls sie fehlt oder mit einem # auskommentiert ist, fügen Sie sie hinzu oder entfernen Sie die Auskommentierung und speichern Sie anschließend die Datei.
Neuere OpenSSH-Versionen unterstützen auch das Subsystem „sftp internal-sftp“, einen integrierten Handler, der keine externe Binärdatei aufruft:
Subsystem sftp internal-sftp
Sowohl „sftp-server.exe“ als auch „internal-sftp“ funktionieren; in dieser Anleitung wird „sftp-server.exe“ verwendet, da dies der standardmäßig ausgelieferte Wert ist.
Optionale Einstellungen, die Sie möglicherweise ebenfalls in „sshd_config“ vornehmen möchten:
# Default value, already set; shown here for reference if key-based authentication isn't working # AuthorizedKeysFile .ssh/authorized_keys # Restrict access to specific users (optional) # AllowUsers username1 username2 # Logging SyslogFacility LOCAL0 LogLevel INFO
Für Konten, die Mitglieder der lokalen Administratorengruppe sind, verwendet der Windows-Port von OpenSSH eine andere Datei: C:\ProgramData\ssh\administrators_authorized_keys, nicht .ssh\authorized_keys im Benutzerprofil. Wenn die schlüsselbasierte Authentifizierung für ein Administratorkonto nicht wie erwartet funktioniert, überprüfen Sie stattdessen diese Datei.
Starten Sie den Dienst nach jeder Änderung an der Datei „sshd_config“ neu, um die Änderungen zu übernehmen:
Restart-Service sshd
Überprüfen der SFTP-Verbindung mit WinSCP
Installieren und starten Sie den kostenlosen WinSCP-Client. Wählen Sie im Fenster „Verbindungseinstellungen“ das SFTP-Dateiübertragungsprotokoll aus, geben Sie den Hostnamen oder die IP-Adresse des Servers in das Feld „Hostname“ ein, belassen Sie den Wert im Feld „Portnummer“ auf 22 (sofern Sie keinen anderen Port konfiguriert haben) und geben Sie die Anmeldedaten des Windows-Kontos ein, mit dem Sie die Verbindung herstellen möchten.

Wenn alles korrekt eingerichtet ist, stellt der Client eine Verbindung zum SFTP-Server her und zeigt den Inhalt des Home-Verzeichnisses des Benutzers (das Standardprofilverzeichnis) an. Standardmäßig gelangt der Benutzer in das Verzeichnis „C:\Users\<Benutzername>“. Dateien können dann sicher über das SFTP -Protokoll zwischen dem Server und dem Client übertragen werden.

Deinstallieren der OpenSSH-Server-Funktion
1. Starten Sie PowerShell als Administrator.
2. Beenden Sie den sshd-Dienst, bevor Sie die Funktion entfernen. Das Entfernen der Funktion, während der Dienst noch läuft oder aktiv genutzt wird, kann zu Fehlern oder einem Hängenbleiben führen:
Stop-Service sshd
3. Entfernen Sie die Funktion:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4. (Optional) Entfernen Sie die Firewall-Regel. Dies betrifft sowohl die automatisch erstellte als auch die manuell erstellte Regel, falls eine davon vorhanden ist:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5. (Optional) Konfiguration entfernen: Sie können entweder nur die Konfigurationsdatei entfernen oder eine vollständige Bereinigung einschließlich der Hostschlüssel durchführen.
Um nur die Datei „sshd_config“ zu entfernen, ohne die Hostschlüssel zu berühren:
Remove-Item -Path 'C:\ProgramData\ssh\sshd_config' -Force
Für eine vollständige Bereinigung einschließlich der Host-Schlüssel entfernen Sie stattdessen den gesamten Konfigurationsordner:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Durch das Entfernen des gesamten Ordners werden auch die Host-Schlüssel des Servers dauerhaft gelöscht. Clients, die sich nach der Neuinstallation verbinden, behandeln den Server als neuen, unbekannten SSH-Host. Führen Sie diesen Schritt nur durch, wenn Sie nicht vorhaben, OpenSSH Server später mit derselben Konfiguration neu zu installieren.