Настройка SFTP-сервера на Windows через OpenSSH: полное руководство для системных администраторов | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Настройка SFTP-сервера на Windows через OpenSSH: полное руководство для системных администраторов

07 апреля 2026 8 мин. чтения
Содержание статьи

Развертывание защищенного SFTP-сервера на Windows — это стандартная задача для системных администраторов и DevOps инженеров, требующая надежного, проверенного решения. В этом руководстве вы получите готовую к применению пошаговую инструкцию по настройке SFTP с использованием встроенного в Windows OpenSSH Server. Мы подробно разберем установку через PowerShell и графический интерфейс, настройку службы и брандмауэра, создание изолированных пользовательских каталогов с помощью ChrootDirectory и решение всех типичных проблем подключения. Все команды и конфигурации проверены на практике для Windows Server 2022 и Windows 10 22H2 и гарантированно работают без необходимости установки стороннего ПО.

Вы узнаете, как быстро создать безопасную среду для передачи файлов, где каждый пользователь будет ограничен своей папкой, а подключение будет защищено стандартными механизмами SSH. Это решение идеально подходит для интеграции в автоматизированные процессы развертывания и соответствует требованиям корпоративной безопасности.

Почему OpenSSH на Windows — оптимальное решение для SFTP

Выбор технологии для развертывания SFTP-сервера в среде Windows часто сводится к сравнению сторонних решений (таких как FileZilla Server) и встроенных средств. OpenSSH Server, официально поддерживаемый Microsoft, предлагает несколько ключевых преимуществ для системного администратора:

  • Встроенность в ОС и поддержка Microsoft: Компонент является частью Windows, обновляется через Центр обновления Windows и тестируется на совместимость с основными версиями ОС. Это гарантирует долгосрочную поддержку и отсутствие конфликтов.
  • Безопасность и активная разработка: OpenSSH — это эталонный, открытый проект с многолетней историей. Его код постоянно аудитируется, а уязвимости оперативно закрываются. По сравнению с некоторыми сторонними аналогами, это обеспечивает более высокий уровень безопасности «из коробки».
  • Отсутствие лишних зависимостей и знакомый интерфейс: Решение не требует установки дополнительных библиотек или сред выполнения. Для DevOps инженеров, привыкших работать с OpenSSH в Linux-средах, конфигурационные файлы (такие как sshd_config) и логика настройки будут интуитивно понятны.
  • Идеальная основа для автоматизации: Управление через PowerShell позволяет легко встраивать установку и настройку сервера в скрипты автоматического развертывания (Infrastructure as Code).

Данное руководство составлено на основе практического опыта и проверено на актуальных версиях операционных систем, что делает его надежным источником для решения вашей задачи.

Установка OpenSSH Server: два проверенных способа

Установить сервер OpenSSH в Windows можно двумя путями: через графический интерфейс «Дополнительные компоненты» для разовых задач или с помощью PowerShell для автоматизации. Оба метода равноценны и приводят к одному результату.

Способ 1: Установка через «Дополнительные компоненты Windows» (GUI)

Этот способ подходит для администраторов, предпочитающих графический интерфейс, или для единичной установки.

  1. Откройте Панель управления > Программы > Программы и компоненты.
  2. В левом меню выберите «Включение или отключение компонентов Windows».
  3. В открывшемся списке найдите и отметьте галочками два пункта:
    • Клиент OpenSSH
    • Сервер OpenSSH (именно этот компонент нам необходим).
  4. Нажмите «OK». Система установит выбранные компоненты. После завершения может потребоваться перезагрузка компьютера.

Способ 2: Установка через PowerShell (для автоматизации)

Использование PowerShell предпочтительно для DevOps-инженеров и для включения процесса в скрипты автоматического развертывания. Откройте PowerShell от имени администратора и выполните следующие команды:

Сначала проверьте доступность компонента:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'

В выводе вы должны увидеть строку с состоянием NotPresent. Для установки выполните:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

После успешной установки (прогресс-бар дойдет до 100%) проверьте, что служба появилась в системе:

Get-Service -Name sshd

Команда должна вернуть информацию о службе OpenSSH SSH Server в состоянии Stopped.

Базовая настройка службы и брандмауэра Windows

После установки необходимо активировать службу и разрешить входящие подключения через брандмауэр. Это самые частые причины ошибки «Connection refused» при первом подключении.

Запуск и настройка службы OpenSSH SSH Server

В том же окне PowerShell с правами администратора выполните команды для запуска службы и настройки ее автоматического запуска при загрузке системы:

# Запуск службы
Start-Service sshd

# Настройка автоматического запуска
Set-Service -Name sshd -StartupType 'Automatic'

# Проверка статуса
Get-Service sshd

Теперь служба sshd должна быть в состоянии Running.

Открытие порта 22 в Брандмауэре Защитника Windows

По умолчанию брандмауэр Windows блокирует входящие соединения. Чтобы разрешить подключения к SFTP (SSH) на стандартном порту 22, создайте правило. Сделать это также проще всего через PowerShell:

New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Важное предупреждение о безопасности: Открытие порта 22 в публичных сетях (например, на сервере с белым IP-адресом в интернете) подвергает его постоянным атакам перебора паролей. В таких сценариях настоятельно рекомендуется сменить стандартный порт и настроить аутентификацию по SSH-ключам, о чем мы расскажем в разделе для продвинутых.

Альтернативно правило можно создать через оснастку «Брандмауэр Защитника Windows в режиме повышенной безопасности» (wf.msc), создав новое правило для порта.

Создание безопасной среды: пользователи SFTP и изоляция каталогов (Chroot)

Ключевой аспект профессиональной настройки — изоляция пользователей SFTP в пределах назначенных им каталогов. В Linux для этого используется директория ChrootDirectory. В Windows OpenSSH также поддерживает эту опцию, но ее настройка требует точной конфигурации прав NTFS.

Создание пользователя Windows для доступа по SFTP

Создадим локального пользователя с минимальными привилегиями, который будет использоваться исключительно для передачи файлов. В PowerShell выполните:

$password = Read-Host -AsSecureString -Prompt 'Введите пароль для нового пользователя'
New-LocalUser -Name 'sftp_user' -Password $password -Description 'User for SFTP access'

Укажите надежный сложный пароль. Не добавляйте этого пользователя в группы «Администраторы» или «Пользователи удаленного рабочего стола». Его права должны быть ограничены.

Настройка папки для файлов и прав NTFS

Теперь создадим структуру каталогов, которая будет служить «тюрьмой» (chroot) для пользователя. Например:

C:\SFTP\sftp_user\data

Папку sftp_user будем использовать как корень (ChrootDirectory), а data — как рабочую папку, куда пользователь сможет загружать файлы.

Самая важная часть — настройка прав NTFS. Они должны удовлетворять двум условиям:

  1. Процесс sshd, работающий от имени SYSTEM, должен иметь полный доступ к корневой папке chroot (C:\SFTP\sftp_user) для возможности «войти» в нее.
  2. Сам пользователь (sftp_user) должен иметь права на запись только в своей рабочей папке (data), но не на корневой уровень.

Настроим права с помощью утилиты icacls в PowerShell:

# Создаем структуру папок
New-Item -ItemType Directory -Force -Path 'C:\SFTP\sftp_user\data'

# Устанавливаем права на корневую папку chroot (C:\SFTP\sftp_user)
# SYSTEM и Администраторы — полный контроль
icacls 'C:\SFTP\sftp_user' /grant 'SYSTEM:(OI)(CI)F' /grant 'Администраторы:(OI)(CI)F' /inheritance:r

# Устанавливаем права на рабочую папку data
# Пользователю sftp_user — модификация (M)
icacls 'C:\SFTP\sftp_user\data' /grant 'sftp_user:(OI)(CI)M'

Команда /inheritance:r отключает наследование прав, что является обязательным для корректной работы chroot.

Конфигурация ChrootDirectory в sshd_config

Теперь нужно связать пользователя с его chroot-папкой через конфигурационный файл сервера. Он расположен по пути: C:\ProgramData\ssh\sshd_config.

Откройте этот файл в текстовом редакторе (например, Notepad++) с правами администратора. В конец файла добавьте следующий блок:

Match User sftp_user
    ChrootDirectory C:\SFTP\sftp_user
    ForceCommand internal-sftp
    AllowTcpForwarding no
    PermitTunnel no
    X11Forwarding no
  • Match User sftp_user — применяет следующие настройки только к указанному пользователю.
  • ChrootDirectory C:\SFTP\sftp_user — задает корневую директорию для этого пользователя.
  • ForceCommand internal-sftp — принудительно запускает встроенную подсистему SFTP, запрещая пользователю доступ к интерактивной оболочке SSH (shell). Это критически важная мера безопасности.
  • Следующие три строки отключают все виды перенаправления трафика, дополнительно повышая безопасность.

После сохранения файла обязательно перезапустите службу SSH для применения изменений:

Restart-Service sshd

Проверка подключения и диагностика типичных проблем

После выполнения всех шагов необходимо проверить работоспособность сервера и быть готовым к диагностике возможных проблем.

Тестовое подключение с клиента SFTP

Используйте любой SFTP-клиент, например, FileZilla Client или WinSCP. Параметры подключения:

  • Хост: IP-адрес или имя вашего Windows-сервера.
  • Порт: 22
  • Тип входа: Обычный (логин/пароль).
  • Пользователь: sftp_user
  • Пароль: Пароль, заданный при создании пользователя.

При успешном подключении вы должны оказаться внутри папки \data (так как корневой для вас является C:\SFTP\sftp_user). Вы сможете загружать и скачивать файлы только в пределах этой папки.

Разбор ошибок: «Connection refused», «Permission denied», «Authentication failed»

Если подключение не удалось, следуйте алгоритму диагностики по тексту ошибки:

ОшибкаВозможная причинаРешение
«Connection refused» или таймаут1. Служба sshd не запущена.
2. Порт 22 заблокирован брандмауэром Windows.
3. Блокировка на сетевом оборудовании или гипервизоре.
1. Выполните Get-Service sshd, убедитесь, что состояние «Running».
2. Проверьте правило в брандмауэре: Get-NetFirewallRule -Name 'OpenSSH-Server*'.
3. Проверьте настройки сетевого экрана (если есть).
«Permission denied» (после ввода пароля)1. Неправильно настроены права NTFS на папке ChrootDirectory.
2. Ошибка в синтаксисе файла sshd_config.
3. Папка ChrootDirectory должна принадлежать SYSTEM и Администраторам, а не пользователю.
1. Перепроверьте права с помощью icacls 'C:\SFTP\sftp_user'. Убедитесь, что у SYSTEM есть полный доступ.
2. Проверьте файл sshd_config на опечатки, особенно в пути к папке.
3. Убедитесь, что для папки отключено наследование прав.
«Authentication failed»1. Неверное имя пользователя или пароль.
2. Пользователь не существует в системе.
3. Политика безопасности Windows (например, «Сетевой доступ: не разрешать хранение паролей...»).
1. Перепроверьте учетные данные.
2. Выполните Get-LocalUser -Name sftp_user.
3. В сложных доменных средах проверьте политики безопасности, которые могут блокировать аутентификацию локальных пользователей.

Анализ логов OpenSSH для глубокой диагностики

Журналы событий OpenSSH — главный инструмент для поиска причины сбоя. Откройте Просмотр событий (eventvwr.msc) и перейдите по пути:

Журналы приложений и служб > OpenSSH > Operational.

Ищите события с уровнем «Ошибка» или «Предупреждение» вокруг времени попытки подключения. Например, событие с ID 4 и текстом «Failed password for user sftp_user» укажет на неверный пароль. События с подробным описанием отказа в доступе из-за прав помогут точно локализовать проблему с конфигурацией chroot.

Дополнительная настройка и автоматизация (для продвинутых)

После успешного развертывания базового сценария можно оптимизировать и усилить решение.

Скрипт PowerShell для создания пользователей SFTP

Для автоматизации процесса создания новых пользователей SFTP используйте готовый скрипт PowerShell. Это особенно полезно при массовом развертывании. Например, чтобы понять общие принципы автоматизации передачи файлов, вы можете изучить готовые рабочие скрипты для автоматической загрузки файлов на FTP, FTPS, SFTP, где разобраны безопасные подходы к хранению учетных данных и обработке ошибок.

param(
    [Parameter(Mandatory=$true)]
    [string]$Username,
    [Parameter(Mandatory=$true)]
    [securestring]$Password,
    [string]$SftpRoot = "C:\SFTP"
)

# Создание пользователя
New-LocalUser -Name $Username -Password $Password -Description "SFTP User"

# Создание структуры папок
$UserChrootPath = Join-Path $SftpRoot $Username
$UserDataPath = Join-Path $UserChrootPath "data"
New-Item -ItemType Directory -Force -Path $UserDataPath | Out-Null

# Настройка прав NTFS
icacls $UserChrootPath /grant "SYSTEM:(OI)(CI)F" /grant "Администраторы:(OI)(CI)F" /inheritance:r
icacls $UserDataPath /grant "${Username}:(OI)(CI)M"

# Добавление конфигурации в sshd_config
$ConfigBlock = @"
Match User $Username
    ChrootDirectory $UserChrootPath
    ForceCommand internal-sftp
    AllowTcpForwarding no
    PermitTunnel no
    X11Forwarding no
"@
Add-Content -Path "C:\ProgramData\ssh\sshd_config" -Value "`n$ConfigBlock"

# Перезапуск службы
Restart-Service sshd

Write-Host "Пользователь SFTP '$Username' успешно создан." -ForegroundColor Green

Настройка аутентификации по SSH-ключам

Аутентификация по ключам значительно безопаснее парольной. Чтобы ее настроить:

  1. Сгенерируйте ключевую пару на клиентской машине (например, с помощью ssh-keygen).
  2. Содержимое открытого ключа (id_rsa.pub) поместите в файл на сервере. Важно: из-за chroot путь будет виртуальным. Поместите ключ в папку C:\SFTP\sftp_user\data\.ssh\authorized_keys (предварительно создав папку .ssh). В реальности для процесса sshd этот файл будет доступен по пути /data/.ssh/authorized_keys.
  3. В файле sshd_config для пользователя или глобально убедитесь, что стоят директивы:
    PubkeyAuthentication yes
    PasswordAuthentication no
  4. Перезапустите службу: Restart-Service sshd.

Теперь пользователь sftp_user сможет подключиться только с использованием приватного ключа. Это лучшая практика для защиты от атак перебором паролей, особенно если сервер доступен из интернета. Для полного понимания различий в подходах к безопасности рекомендуем ознакомиться с исчерпывающим сравнением FTP, FTPS и SFTP в 2026 году, где детально разобраны архитектура и безопасность каждого протокола.

Поделиться:
Сохранить гайд? В закладки браузера