SFTP bedeutet SSH File Transfer Protocol. Du kannst mit SFTP Dateien verschlüsselt übertragen und nur 1 Port in der Firewall freischalten. Das ist ein großer Vorteil gegenüber klassischen FTP Setups, die oft mehr Ports und somit auch mehr Fehlerquellen haben.
Wichtig ist auch der Unterschied zwischen SFTP und FTP: SFTP ist nicht FTPS. SFTP läuft über SSH. FTPS ist FTP mit TLS. FTP verwendet auch ganz andere Ports wie SFTP. Im Alltag nutzt man SFTP oftmals für Backups, den Austausch mit Dienstleistern oder auch für eine automatisierte Datei Ablage.
Voraussetzungen für einen SFTP Server mit OpenSSH unter Windows
Für einen SFTP Server unter Windows ist OpenSSH der einfachste Weg, weil es als Windows Capability verfügbar ist. Du brauchst für die Installation ein Konto mit Administratorrechten.
Wenn Du planst, dass der Zugriff auf den SFTP Server auch aus dem Internet möglich ist, dann brauchst du neben der Windows Firewall oft auch eine Portweiterleitung im Router.
SFTP Server einrichten mit OpenSSH auf Windows Client und Windows Server
Voraussetzungen prüfen und OpenSSH Status abfragen
Öffne zunächst eine PowerShell als Administrator. Dann prüfst du zuerst, ob OpenSSH schon vorhanden ist.
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Du siehst dann mindestens zwei Einträge. Einmal OpenSSH Client und einmal OpenSSH Server.

Wenn du OpenSSH noch nicht installiert hast, installierst du jetzt Server und optional auch den Client. Der Client ist praktisch, weil du damit direkt vom selben System testen kannst.
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Wenn du dazu lieber eine grafische Anleitung willst, findest du eine gute Anleitung dazu in diesem älteren Beitrag: „SSH Client unter Windows installieren„.
SSH Dienst starten und automatisch starten lassen
Nach der Installation startest du den Windows Dienst und setzt ihn auf Autostart. Das ist wichtig, damit dein SFTP Server nach einem Neustart wieder verfügbar ist.
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
Mehr Informationen zum Ändern des Starttyps von Windows Diensten per PowerShell findest Du ebenfalls hier auf Windows-FAQ.de.
Windows Firewall Regel prüfen und bei Bedarf erstellen
OpenSSH nutzt standardmäßig den TCP Port 22. Windows legt bei der Installation in der Regel eine passende Firewall Regel für den eingehenden Zugriff an. Wenn die Regel fehlt oder deaktiviert ist, bekommst du schnell Verbindungsfehler.
Mit dem folgenden Befehl kannst Du die Windows Firewall überprüfen. Außerdem erstellt der Befehl die passende Regel, falls sie nicht vorhanden ist.
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) { New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 }
Solltest Du ggf. wichtige Firewall Regeln auf anderen Systemen bereits erstellt und erfolgreich getestet haben, so kannst Du diese Firewall Regeln auch exportieren und auf einem anderen System wieder importieren. Natürlich kannst Du die Windows Firewall Regel für den passenden Port auch manuell anlegen.
Funktionstest mit Port Check und Konfigurationstest
Jetzt kommt der Teil, mit dem du wirklich prüfen kannst, ob deine bisherige Installation funktioniert.
Schritt 1: Prüfe den Dienststatus.
Get-Service -Name sshd
Schritt 2: Prüfe, ob Port 22 auf dem Server auch abgefragt wird.
netstat -an | findstr :22
Wenn alles passt, siehst du typischerweise „Listening Zeilen“ für IPv4 und IPv6.
Schritt 3: Prüfe die Konfiguration auf Syntaxfehler.
sshd -t
Wenn der Befehl ohne Ausgabe endet, ist das meistens ein gutes Zeichen.
Schritt 4: Teste die Verbindung lokal.
Für lokale Tests kannst du „localhost“ bzw. die IP Adresse 127.0.0.1 verwenden.
sftp deinbenutzer@localhost
Schritt 5: Teste die Verbindung aus dem Netz.
Test-NetConnection -ComputerName <hostname_oder_ip> -Port 22
Gerade bei Zugriff über Router oder weitere Firewalls ist das sehr hilfreich.
SFTP Benutzer einrichten und Ordnerstruktur einrichten
Benutzerkonto für SFTP anlegen
Für SFTP solltest du ein eigenes Benutzerkonto anlegen, das nur dafür da ist. Lege dafür am besten ein lokales Windows Konto an. Wenn dein Rechner in einer Domäne hängt, dann kannst Du Dich trotzdem lokal an einem Domänen-PC anmelden.
Ordner für den Datentransfer anlegen
Lege dir eine Ordnerstruktur an. Das funktioniert z.B. wie folgt:
New-Item -ItemType Directory -Path C:\SFTP -Force New-Item -ItemType Directory -Path C:\SFTP\upload -Force
Dann gibst du dem SFTP Benutzer nur auf den Upload Ordner Schreibrechte. Die Rechte auf C:\SFTP selbst sollten restriktiv bleiben, besonders wenn du später mit Chroot arbeiten möchtest. Wenn du zum Windows Dateisystemen und Rechten generell mehr Informationen suchst, dann ist dieser Beitrag ein guter Einstieg, weil er auch den Sicherheitsaspekt von NTFS nennt: exFAT oder NTFS.
SFTP Server absichern und nur SFTP Zugriff erlauben
sshd_config finden, anpassen und korrekt neu starten
Unter Windows liegt die Konfiguration standardmäßig hier:
%ProgramData%\ssh\sshd_config
OpenSSH liest die Datei beim Start des Dienstes. Das heißt, nach Änderungen musst du den Dienst neu starten. Das funktioniert mit diesem PowerShell Befehl:
Restart-Service sshd
Mach vor dem Neustart immer den schnellen Test. Er findet viele Tippfehler sofort.
sshd -t
Zugriff begrenzen mit AllowUsers und AllowGroups
Du kannst sehr genau steuern, wer sich verbinden darf und wer nicht. Das geht über AllowUsers, AllowGroups, DenyUsers und DenyGroups.
Achtung: Beachte dabei, dass die Namen in der Konfiguration in Kleinbuchstaben stehen sollen. Schau auch, dass Du in den Gruppennamen keine Leerzeichen verwendest, das verhindert auf jeden Fall Probleme.
New-LocalGroup -Name "sftpusers" -Description "SFTP Zugriff" Add-LocalGroupMember -Group "sftpusers" -Member "deinbenutzer"
Dann trägst du in der „sshd_config“ zum Beispiel ein:
AllowGroups sftpusers
Bei Domänenkonten nutzt du in der Praxis meist das Format „domain\username„.
Nur SFTP Zugriff aktivieren mit ForceCommand
Wenn du willst, dass ein Benutzer nur SFTP kann und keine Shell bekommt, dann kannst du „ForceCommand“ mit internal sftp verwenden. Das ist auch der empfohlene Weg, wenn du „ChrootDirectory“ einsetzen willst. „ChrootDirectory“ ist unter Windows nur für SFTP Sessions gedacht. Für normale interaktive Sitzungen greift es nicht.
Ein typisches Beispiel für so eine SFTP Gruppe:
Match Group sftpusers ForceCommand internal-sftp ChrootDirectory C:\SFTP
Bei „ChrootDirectory“ ist die Ordner Struktur sehr wichtig. Der „Chroot“ Ordner muss sehr restriktiv sein. Lege deshalb darunter einen Upload Ordner an, der beschreibbar ist.
Schlüsselbasierte Anmeldung aktivieren
Passwörter funktionieren, aber Schlüssel sind in der Praxis deutlich robuster gegen automatisierte Login Versuche. OpenSSH bringt unter Windows alles mit, was du brauchst. Dazu gehören ssh keygen, ssh agent, ssh add und auch sftp selbst.
Schritt 1: Erzeuge auf dem Client ein Schlüsselpaar.
ssh-keygen
Wenn du keinen Algorithmus angibst, wird standardmäßig Ed25519 genutzt.
Schritt 2: Lege den Public Key auf dem Server ab.
Bei einem normalen Benutzer ist der Standardpfad:
C:\Users\username\.ssh\authorized_keys
Bei einem Benutzer mit Administratorrechten ist es anders. Dann wird eine zentrale Datei unter ProgramData genutzt.
Schritt 3: Setze die Berechtigungen korrekt, vor allem bei der Administrator Datei.
Wenn dein Windows nicht ein englisches Windows ist, dann verwende dafür besser die SID Variante. Die ist sprachneutral und verhindert typische Rechteprobleme.
icacls.exe "$env:ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "*S-1-5-32-544:F" /grant "SYSTEM:F"
Schritt 4: Wenn der Schlüssel Test klappt, kannst du PasswordAuthentication in sshd_config deaktivieren. Das reduziert die Angriffsfläche stark.
Logging einschalten
Wenn du Fehler schnell finden willst, solltenst Du das Loggin einschalten. Du findest entsprechende Einträge in der Windows Ereignisanzeige im Bereich „Application“ and“ Services Logs“ unter OpenSSH.
Wenn du lieber Dateien als Logs möchtest, kannst du „file based logging“ aktivieren. Dafür nutzt du SyslogFacility LOCAL0. Dann landen Logs in ProgramData im logs Ordner. Wenn du SFTP aus dem Internet erreichbar machst, dann plane einen Brute Force Schutz aktiv mit ein.
Fehlersuche und häufige Fragen zum SFTP Server unter Windows
Woran erkennst du schnell, ob dein SFTP Server wirklich läuft?
Prüfe drei Dinge in genau dieser Reihenfolge. Erstens den Dienst.
Get-Service -Name sshd
Zweitens den Port.
netstat -an | findstr :22
Drittens die Konfiguration.
sshd -t
Warum klappt der Zugriff aus dem Internet nicht, obwohl lokal alles geht?
Wenn lokal alles geht, idann st der Server in der Regel richtig eingerichtet. Dann leitet der Router in der Regel den Port nicht weiter. Das ist ein dann ein klassisches NAT Thema bzw. NAT Problem. Oder ein externe Firewall blockiert den Port 22. Auch das kommt häufig vor.
Warum wird mein Schlüssel abgelehnt?
Die häufigsten Ursachen sind schlicht der falsche Ablageort oder falsche Berechtigungen. Wenn der Benutzer in der Administratorgruppe ist, zählt nicht die Datei im Benutzerprofil. Dann zählt „administrators_authorized_keys“ in ProgramData.
Was tun, wenn der OpenSSH Dienst nach einem Windows Update nicht mehr startet?
Das ist leider ein bekanntes Szenario, das nach bestimmten Updates auftreten kann. Es hängt dann oft an Berechtigungen im „ProgramData“ Bereich. In der Regel lohnt sich auf jeden Fall ein Blick in die Windows Ereignisanzeige, denn dort werden derartige Probleme ausführlich dokumentiert.
Auf welchem Port läuft SFTP und solltest du den Port ändern?
SFTP läuft über SSH. Der Standard ist Port 22. Das ist weltweit so festgelegt und wird auch von OpenSSH standardmäßig genutzt. Du kannst den Port ändern, indem du in „sshd_config“ den Port Eintrag setzt und danach Firewall und Portweiterleitung anpasst. Danach musst du „sshd“ neu starten und den Port wieder mit netstat prüfen.
– Laptop startet bis zum Logo, aber Windows kommt nicht hoch





Neueste Kommentare