Встановлення, тестування та видалення SFTP-сервера на основі OpenSSH у Windows
Ця інструкція застосовна до Windows Server 2019, 2022 і 2025, до складу яких OpenSSH Server входить як вбудований додатковий компонент. Завантаження стороннього ПЗ не потрібне.
Покрокова інструкція
Встановлення компонента OpenSSH Server
1) Запустіть PowerShell від імені адміністратора: Пуск, введіть "PowerShell" → клацніть правою кнопкою миші на "PowerShell" → Запустити від імені адміністратора.
2) Перевірте, чи вже встановлено компонент OpenSSH Server:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Примітка: Тут перелічено і OpenSSH.Client, і OpenSSH.Server. Переконайтеся, що перевіряєте стан саме OpenSSH.Server, клієнтський компонент може бути вже встановлений, але в цій інструкції йдеться не про нього.
Якщо для OpenSSH.Server відображається стан State : NotPresent, встановіть його:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Примітка: Windows встановлює вбудований компонент OpenSSH Server у каталог C:\Windows\System32\OpenSSH\. Не встановлюйте OpenSSH вручну безпосередньо в C:\Windows, це порушує домовленості про каталоги Windows і може призвести до проблем із правами доступу.
3) Запустіть службу sshd і налаштуйте її на автоматичний запуск:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4) Переконайтеся, що служба запущена:
Get-Service sshd

У полі Status має відображатися Running. Щоб додатково підтвердити, що тип запуску встановлено в Automatic:
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

5) Перевірте розташування встановленого двійкового файлу OpenSSH та відомості про версію:
Get-Command sshd | Select-Object Source (Get-Command sshd).FileVersionInfo

Поле Source підтверджує, що шлях встановлення відповідає C:\Windows\System32\OpenSSH\sshd.exe; FileVersionInfo показує версію OpenSSH (наприклад, OpenSSH_8.1p1, FileVersion 8.1.0.1 у Windows Server 2022).
Відкриття порту в брандмауері
За замовчуванням під час встановлення компонента OpenSSH Server зазвичай автоматично створюється вхідне правило брандмауера з іменем OpenSSH-Server-In-TCP. Переконайтеся, що воно існує та увімкнене:
Get-NetFirewallRule -Name *OpenSSH-Server*

Якщо правило відсутнє, створіть його вручну (зверніть увагу на іншу назву правила, це створене вручну правило не пов'язане з автоматично згенерованим правилом OpenSSH-Server-In-TCP):
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Переконайтеся, що порт справді відкритий і прослуховується:
Test-NetConnection -ComputerName localhost -Port 22

Результат TcpTestSucceeded : True підтверджує, що служба прослуховується локально. Це не підтверджує, що брандмауер пропускає трафік ззовні, для повної перевірки виконайте ту саму команду з іншого комп'ютера в мережі, замінивши localhost на IP-адресу сервера.
Налаштування sshd_config для SFTP
Файл конфігурації розташований за шляхом:
C:\ProgramData\ssh\sshd_config
Відкрийте його в текстовому редакторі з правами адміністратора (наприклад, Notepad, запущений від імені адміністратора) і переконайтеся, що присутні такі налаштування (або налаштуйте їх за потреби):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

Примітка щодо безпеки: PasswordAuthentication yes показано тут, щоб спростити інструкцію, але для робочого сервера, доступного з Інтернету, безпечнішим вибором є автентифікація за ключами з PasswordAuthentication no. Якщо ви плануєте використовувати автентифікацію за ключами, див. необов'язкове налаштування AuthorizedKeysFile нижче.
Важливо: Рядок Subsystem sftp визначає, який двійковий файл обробляє сеанси SFTP. Без цього рядка (присутнього й не закоментованого) SSH-з'єднання працюватимуть, але передавання файлів через SFTP завершиться помилкою.
За замовчуванням цей рядок уже присутній і не закоментований у файлі конфігурації вбудованого компонента. Якщо він відсутній або закоментований символом #, додайте його або зніміть коментар, після чого збережіть файл.
Примітка: Новіші версії OpenSSH також підтримують Subsystem sftp internal-sftp, вбудований обробник, який не викликає зовнішній двійковий файл:
Subsystem sftp internal-sftp
Працює як sftp-server.exe, так і internal-sftp; у цій інструкції використовується sftp-server.exe, оскільки це значення постачається за замовчуванням.
Необов'язкові налаштування, які ви також можете додати до sshd_config:
# Значення за замовчуванням, уже задано; показано тут для довідки, якщо автентифікація за ключами не працює # AuthorizedKeysFile .ssh/authorized_keys # Обмежити доступ певними користувачами (необов'язково) # AllowUsers username1 username2 # Журналювання SyslogFacility LOCAL0 LogLevel INFO
Примітка: Для облікових записів, що входять до локальної групи «Administrators», порт OpenSSH для Windows використовує інший файл: C:\ProgramData\ssh\administrators_authorized_keys, а не .ssh\authorized_keys у профілі користувача. Якщо автентифікація за ключами для облікового запису адміністратора не працює належним чином, перевірте натомість цей файл.
Після будь-якої зміни sshd_config перезапустіть службу, щоб застосувати її:
Restart-Service sshd
Перевірка SFTP-з'єднання за допомогою WinSCP
Встановіть і запустіть безкоштовний клієнт WinSCP. У вікні налаштувань підключення виберіть протокол передавання файлів SFTP, введіть ім'я хоста або IP-адресу сервера в поле Host name, залиште в полі Port number значення 22 (якщо ви не налаштували інший порт) і введіть облікові дані того облікового запису Windows, під яким ви підключаєтеся.

Якщо все налаштовано правильно, клієнт підключається до SFTP-сервера й відображає вміст домашнього каталогу користувача (каталогу профілю за замовчуванням). За замовчуванням користувач потрапляє до C:\Users\<username>. Після цього файли можна безпечно передавати між сервером і клієнтом через протокол SFTP.

Видалення компонента OpenSSH Server
1) Запустіть PowerShell від імені адміністратора.
2) Зупиніть службу sshd перед видаленням компонента, видалення під час запущеної або активно використовуваної служби може завершитися помилкою або зависнути:
Stop-Service sshd
3) Видаліть компонент:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4) (Необов'язково) Видаліть правило брандмауера. Це охоплює як автоматично створене, так і створене вручну правило, на випадок якщо якесь із них існує:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5) (Необов'язково) Видалення конфігурації: ви можете видалити лише файл конфігурації або виконати повне очищення, включно з ключами хоста.
Щоб видалити лише sshd_config, не торкаючись ключів хоста:
Remove-Item -Path 'C:\ProgramData\ssh\sshd_config' -Force
Для повного очищення, включно з ключами хоста, видаліть натомість увесь каталог конфігурації:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Попередження: Під час видалення всього каталогу також безповоротно видаляються ключі хоста сервера. Клієнти, що підключаються після перевстановлення, розцінюватимуть сервер як новий, невідомий SSH-хост. Робіть це лише якщо не плануєте перевстановлювати OpenSSH Server з тією самою конфігурацією надалі.