Установка, тестирование и удаление 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
Примечание: Для учётных записей, входящих в локальную группу «Администраторы», порт 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 с той же конфигурацией в дальнейшем.