Instalowanie, testowanie i odinstalowywanie serwera SFTP opartego na OpenSSH w systemie Windows
Ten przewodnik dotyczy systemów Windows Server 2019, 2022 i 2025, które zawierają OpenSSH Server jako wbudowaną funkcję opcjonalną. Nie jest wymagane pobieranie oprogramowania innych firm.
Przewodnik krok po kroku
Instalacja funkcji OpenSSH Server
1) Uruchom PowerShell jako administrator: Start, wpisz "PowerShell" → kliknij prawym przyciskiem myszy na "PowerShell" → Uruchom jako administrator.
2) Sprawdź, czy funkcja OpenSSH Server jest już zainstalowana:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Uwaga: Lista zawiera zarówno OpenSSH.Client, jak i OpenSSH.Server. Upewnij się, że sprawdzasz stan konkretnie składnika OpenSSH.Server, składnik kliencki może być już zainstalowany i nie jest tym, czego dotyczy ten przewodnik.
Jeśli OpenSSH.Server pokazuje stan State : NotPresent, zainstaluj go:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Uwaga: System Windows instaluje wbudowaną funkcję OpenSSH Server w lokalizacji C:\Windows\System32\OpenSSH\. Nie instaluj OpenSSH ręcznie bezpośrednio w C:\Windows, narusza to konwencje katalogów systemu Windows i może powodować problemy z uprawnieniami.
3) Uruchom usługę sshd i ustaw ją tak, aby uruchamiała się automatycznie:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4) Sprawdź, czy usługa jest uruchomiona:
Get-Service sshd

Pole Status powinno pokazywać Running. Aby dodatkowo potwierdzić, że 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 Source potwierdza, że ścieżka instalacji odpowiada C:\Windows\System32\OpenSSH\sshd.exe; FileVersionInfo pokazuje wersję OpenSSH (na przykład OpenSSH_8.1p1, FileVersion 8.1.0.1 w systemie Windows Server 2022).
Otwieranie portu zapory
Domyślnie instalacja funkcji OpenSSH Server zwykle automatycznie tworzy regułę zapory dla ruchu przychodzącego o nazwie OpenSSH-Server-In-TCP. Potwierdź, że 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 niezależna 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 potwierdza to, że zapora przepuszcza ruch z zewnątrz, aby w pełni to zweryfikować, wykonaj to samo polecenie z innego komputera w sieci, zastępując localhost adresem IP serwera.
Konfiguracja sshd_config dla SFTP
Plik konfiguracyjny znajduje się w lokalizacji:
C:\ProgramData\ssh\sshd_config
Otwórz go w edytorze tekstu z uprawnieniami administratora (na przykład Notepad uruchomiony jako administrator) i potwierdź, że obecne są następujące ustawienia (lub skonfiguruj je według potrzeb):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

Uwaga dotycząca bezpieczeństwa: PasswordAuthentication yes jest tu pokazane, aby ten przewodnik był prosty, ale w przypadku serwera produkcyjnego wystawionego do Internetu bezpieczniejszym wyborem jest uwierzytelnianie oparte na kluczach z PasswordAuthentication no. Jeśli planujesz korzystać z uwierzytelniania opartego na kluczach, zapoznaj się z opcjonalnym ustawieniem AuthorizedKeysFile poniżej.
Ważne: Wiersz Subsystem sftp określa, który plik binarny obsługuje sesje SFTP. Bez tego wiersza obecnego i niezakomentowanego połączenia SSH będą działać, ale transfer plików SFTP zakończy się niepowodzeniem.
Domyślnie ten wiersz jest już obecny i niezakomentowany w pliku konfiguracyjnym wbudowanej funkcji. Jeśli go brakuje lub jest zakomentowany znakiem #, dodaj go lub usuń znak komentarza, a następnie zapisz plik.
Uwaga: Nowsze wersje OpenSSH obsługują również Subsystem sftp internal-sftp, wbudowaną procedurę obsługi, która nie wywołuje zewnętrznego pliku binarnego:
Subsystem sftp internal-sftp
Działa zarówno sftp-server.exe, jak i internal-sftp; ten przewodnik używa sftp-server.exe, ponieważ jest to wartość dostarczana domyślnie.
Ustawienia opcjonalne, które również warto uwzględnić w sshd_config:
# Wartosc domyslna, juz ustawiona; pokazana tutaj jako odniesienie, jesli uwierzytelnianie oparte na kluczach nie dziala # AuthorizedKeysFile .ssh/authorized_keys # Ograniczenie dostepu do okreslonych uzytkownikow (opcjonalnie) # AllowUsers username1 username2 # Rejestrowanie SyslogFacility LOCAL0 LogLevel INFO
Uwaga: W przypadku kont będących członkami 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 kluczach dla konta administratora nie działa zgodnie z oczekiwaniami, sprawdź zamiast tego ten plik.
Po każdej zmianie w pliku sshd_config uruchom ponownie usługę, aby ją zastosować:
Restart-Service sshd
Sprawdzanie połączenia SFTP za pomocą 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 Host name, pozostaw pole Port number na wartości 22 (chyba że skonfigurowano inny port) i wprowadź poświadczenia konta Windows, za pomocą którego się łączysz.

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

Odinstalowywanie funkcji OpenSSH Server
1) Uruchom PowerShell jako administrator.
2) Zatrzymaj usługę sshd przed usunięciem funkcji, usunięcie jej, gdy usługa jest nadal uruchomiona lub aktywnie używana, może się nie powieść lub zawiesić:
Stop-Service sshd
3) Usuń funkcję:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4) (Opcjonalnie) Usuń regułę zapory. Obejmuje to zarówno regułę utworzoną automatycznie, jak i utworzoną ręcznie, na wypadek gdyby którakolwiek z nich istniała:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5) (Opcjonalnie) Usuwanie konfiguracji: możesz usunąć tylko plik konfiguracyjny albo wykonać pełne czyszczenie wraz z kluczami hosta.
Aby usunąć tylko sshd_config bez naruszania kluczy hosta:
Remove-Item -Path 'C:\ProgramData\ssh\sshd_config' -Force
Aby wykonać pełne czyszczenie wraz z kluczami hosta, usuń zamiast tego cały folder konfiguracji:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Ostrzeżenie: Usunięcie całego folderu trwale usuwa również klucze hosta serwera. Klienci łączący się po ponownej instalacji będą traktować serwer jako nowy, nierozpoznany host SSH. Zrób to tylko wtedy, gdy nie planujesz ponownej instalacji OpenSSH Server z tą samą konfiguracją w przyszłości.