Jak skonfigurować serwer SFTP w systemie Windows za pomocą OpenSSH
Niniejszy przewodnik dotyczy systemów Windows Server 2019, 2022 i 2025, które zawierają serwer OpenSSH jako wbudowaną funkcję opcjonalną. Nie jest wymagane pobieranie oprogramowania innych producentów.
Przewodnik krok po kroku
Instalacja funkcji serwera OpenSSH
1. Uruchom program PowerShell jako administrator: Start, wpisz„PowerShell” → kliknij prawym przyciskiem myszy pozycję„PowerShell” → Uruchom jako administrator.
2. Sprawdź, czy funkcja serwera OpenSSH jest już zainstalowana:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Na liście powinny znaleźć się zarówno OpenSSH.Client, jak i OpenSSH.Server. Należy sprawdzić stan konkretnie dla OpenSSH.Server — komponent kliencki może być już zainstalowany i nie jest przedmiotem niniejszego przewodnika.
Jeśli OpenSSH.Server wyświetla stan: NotPresent, zainstaluj go:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

System Windows instaluje wbudowaną funkcję serwera OpenSSH w katalogu C:\Windows\System32\OpenSSH\. Nie należy ręcznie instalować OpenSSH bezpośrednio w katalogu C:\Windows, ponieważ narusza to konwencje katalogowe systemu Windows i może powodować problemy z uprawnieniami.
3. Uruchom usługę sshd i ustaw jej automatyczne uruchamianie:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4. Sprawdź, czy usługa działa:
Get-Service sshd

W polu Status powinien wyświetlać się stan Running. Aby dodatkowo sprawdzić, czy typ uruchamiania jest ustawiony na Automatic:
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

5. Sprawdź lokalizację zainstalowanego pliku binarnego OpenSSH oraz informacje o wersji:
Get-Command sshd | Select-Object Source (Get-Command sshd).FileVersionInfo

Pole „Źródło” potwierdza, że ścieżka instalacji odpowiada lokalizacji C:\Windows\System32\OpenSSH\sshd.exe; pole „Informacje o wersji pliku” pokazuje wersję OpenSSH (na przykład OpenSSH_8.1p1, wersja pliku 8.1.0.1 w systemie Windows Server 2022).
Otwarcie portu zapory
Domyślnie instalacja funkcji OpenSSH Server powoduje automatyczne utworzenie reguły zapory przychodzącej o nazwie „OpenSSH-Server-In-TCP ”. Sprawdź, czy reguła ta istnieje i jest włączona:
Get-NetFirewallRule -Name *OpenSSH-Server*

Jeśli reguła nie istnieje, utwórz ją ręcznie (zwróć uwagę na inną nazwę reguły — ta utworzona ręcznie reguła jest odrębna od automatycznie wygenerowanej reguły OpenSSH-Server-In-TCP ):
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Sprawdź, czy port jest rzeczywiście otwarty i nasłuchuje:
Test-NetConnection -ComputerName localhost -Port 22

Wynik „TcpTestSucceeded : True” potwierdza, że usługa nasłuchuje lokalnie. Nie oznacza to jednak, że zapora przepuszcza ruch z zewnątrz. Aby w pełni to zweryfikować, uruchom to samo polecenie z innego komputera w sieci, zastępując „localhost” adresem IP serwera.
Konfiguracja pliku `sshd_config` dla protokołu SFTP
Plik konfiguracyjny znajduje się w lokalizacji:
C:\ProgramData\ssh\sshd_config
Otwórz go w edytorze tekstowym z uprawnieniami administratora (na przykład w Notatniku uruchomionym jako administrator) i sprawdź, czy występują następujące ustawienia (lub czy są skonfigurowane zgodnie z potrzebami):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

Ustawienie `PasswordAuthentication yes` zostało tutaj pokazane, aby uprościć ten przewodnik, ale w przypadku serwera produkcyjnego podłączonego do Internetu bezpieczniejszym wyborem jest uwierzytelnianie oparte na kluczach z ustawieniem `PasswordAuthentication no`. Jeśli planujesz korzystać z uwierzytelniania opartego na kluczach, zapoznaj się z opcjonalnym ustawieniem `AuthorizedKeysFile` poniżej.
Wiersz „Subsystem sftp ” określa, który plik binarny obsługuje sesje SFTP. Jeśli ten wiersz nie występuje lub jest zakomentowany, połączenia SSH będą działać, ale transfer plików SFTP zakończy się niepowodzeniem.
Domyślnie wiersz ten jest już obecny i nie jest zakomentowany w pliku konfiguracyjnym wbudowanej funkcji. Jeśli go brakuje lub jest zakomentowany znakiem #, dodaj go lub usuń komentarz, a następnie zapisz plik.
Nowsze wersje OpenSSH obsługują również Subsystem sftp internal-sftp, wbudowany moduł obsługujący, który nie wywołuje zewnętrznego pliku binarnego:
Subsystem sftp internal-sftp
Działa zarówno sftp-server.exe, jak i internal-sftp; w tym przewodniku używamy sftp-server.exe, ponieważ jest to wartość domyślna.
Opcjonalne ustawienia, które warto również uwzględnić w pliku sshd_config:
# 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
W przypadku kont należących do lokalnej grupy Administratorzy port OpenSSH dla systemu Windows używa innego pliku: C:\ProgramData\ssh\administrators_authorized_keys, a nie .ssh\authorized_keys w profilu użytkownika. Jeśli uwierzytelnianie oparte na kluczu dla konta administratora nie działa zgodnie z oczekiwaniami, sprawdź ten plik.
Po wprowadzeniu jakichkolwiek zmian w pliku sshd_config należy ponownie uruchomić usługę, aby zmiany zaczęły obowiązywać:
Restart-Service sshd
Sprawdzanie połączenia SFTP za pomocą programu WinSCP
Zainstaluj i uruchom darmowego klienta WinSCP. W oknie ustawień połączenia wybierz protokół transferu plików SFTP, wprowadź nazwę hosta lub adres IP serwera w polu Nazwa hosta, pozostaw w polu Numer portu wartość 22 (chyba że skonfigurowałeś inny port) i wprowadź dane logowania konta Windows, z którego się łączysz.

Jeśli wszystko zostało skonfigurowane poprawnie, klient połączy się z serwerem SFTP i wyświetli zawartość katalogu domowego użytkownika (domyślny katalog profilu). Domyślnie użytkownik trafia do katalogu C:\Users\<nazwa_użytkownika>. Pliki można następnie bezpiecznie przesyłać między serwerem a klientem za pomocą protokołu SFTP.

Odinstalowywanie funkcji serwera OpenSSH
1. Uruchom program PowerShell jako administrator.
2. Zatrzymaj usługę sshd przed usunięciem funkcji; usunięcie jej, gdy usługa nadal działa lub jest aktywna, może zakończyć się niepowodzeniem lub zawieszeniem systemu:
Stop-Service sshd
3. Usuń funkcję:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4. (Opcjonalnie) Usuń regułę zapory. Dotyczy to zarówno reguły utworzonej automatycznie, jak i ręcznie, jeśli któraś z nich istnieje:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5. (Opcjonalnie) Usunięcie konfiguracji: można usunąć tylko plik konfiguracyjny lub przeprowadzić pełne czyszczenie, w tym klucze hosta.
Aby usunąć tylko plik sshd_config bez ingerencji w klucze hosta:
Remove-Item -Path 'C:\ProgramData\ssh\sshd_config' -Force
Aby przeprowadzić pełne czyszczenie, w tym klucze hostów, usuń zamiast tego cały folder konfiguracyjny:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Usunięcie całego folderu powoduje również trwałe usunięcie kluczy hosta serwera. Klienci łączący się po ponownej instalacji będą traktować serwer jako nowy, nierozpoznany host SSH. Należy to zrobić tylko wtedy, gdy nie planuje się ponownej instalacji serwera OpenSSH z tą samą konfiguracją w przyszłości.