Настройка сервера SFTP (SSH FTP) в Windows

Вы можете использовать встроенный в Windows пакет OpenSSH, чтобы легко обеспечить безопасную передачу файлов между клиентом и сервером Windows с помощью функции SFTP (Безопасный FTP) протокол. В этой статье мы покажем, как установить и настроить SFTP-сервер на Windows 10 или Windows Server 2022/2019/2016/2012R2.

SFTP (Безопасно Протокол передачи файлов, Безопасный FTP, или SSH FTP) — это расширение протокола SSH, который является стандартом в мире UNIX/Linux-систем. С точки зрения пользователя он похож на FTP, но на самом деле это совершенно другой протокол, не имеющий с FTP ничего общего. Данные между клиентом и сервером передаются по порту 22 через SSH-туннель (TCP-порт 22).

Основные преимущества SFTP:

  • Файлы и команды передаются в рамках защищенного сеанса SSH;
  • Одно соединение используется для передачи и файлов, и команд;
  • Поддерживаются символические ссылки, прерывание/возобновление передачи, функции удаления файлов и т.д;
  • SFTP-соединение намного быстрее и надежнее на WAN-каналах, где FTP работает медленно или с перебоями;
  • Возможность аутентификации с помощью ключей SSH.
Не путайте протоколы SFTP и FTPS. FTPS — это, по сути, простой FTP с SSL-сертификатом, а SFTP — это протокол для передачи FTP-данных и команд внутри SSH-сессии.

Win32-порт OpenSSH (Win32-OpenSSH) встроен во все современные версии Windows по умолчанию. Вы можете использовать его для настройки безопасного SFTP-сервера вместо использования сторонних продуктов, таких как Core FTP, FileZilla, CYGWIN, FTP Shell, IPSwitch и т. д.

Как установить OpenSSH в Windows?

Пакет OpenSSH входит в состав операционной системы в современных сборках Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 как Feature on Demand (как RSAT).

В этих версиях Windows сервер OpenSSH можно установить с помощью PowerShell:

Add-WindowsCapability -Online -Name OpenSSH.Server*

Или с помощью DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

Также вы можете установить сервер OpenSSH из графического интерфейса Windows 10 (Настройки -> Приложения -> Дополнительные функции -> Добавить функцию -> Открытый SSH-сервер -> Установить).

установка openssh сервера на windows 10установить openssh сервер на windows 10

Чтобы проверить, установлен ли пакет:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

  • Исполняемые файлы OpenSSH находятся в каталоге: c:\windows\system32\OpenSSH\;
  • The sshd_config файл конфигурации находится в C:\ProgramData\ssh (этот каталог создается после первого запуска службы sshd);
  • Файл журнала: c:\windows\system32\OpenSSH\logs\sshd.log;
  • Файл authorized_keys и ключи хранятся в каталоге: %USERPROFILE%\.ssh\.

В предыдущих ранних сборках Windows 10, Windows 8.1 и в Windows Server 2016/2012 R2 вам придется скачать Win32-OpenSSH для Windows с GitHub и установить его вручную (https://github.com/PowerShell/Win32-OpenSSH/releases). Нам нужна версия для Windows x64: OpenSSH-Win64.zip (4,15 МБ).

  1. Распакуйте архив в целевую папку: C:\OpenSSH-Win;
  2. Откройте повышенную строку PowerShell и переключитесь на папку OpenSSH: Cd C:\OpenSSH-Win
  3. Добавьте путь к каталогу OpenSSH в поле Путь переменная окружения (Свойства системы -> вкладка Дополнительно -> Переменные окружения -> выберите и отредактируйте параметр Path системная переменная -> Добавьте путь к папке OpenSSH); добавить папку openssh в путь системной переменной добавить папку openssh в путь к системным переменным
  4. Установите сервер OpenSSH: .\install-sshd.ps1 (должно появиться зеленое сообщение «службы sshd и ssh-agent успешно установлены«);
    Если запуск сценариев PowerShell на вашем компьютере заблокирован политикой выполнения PowerShell, вы можете запустить сценарий с помощью этой команды: powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

    установка openssh (службы sshd) с помощью сценария powershell установка openssh (службы sshd) с помощью сценария powershell

Как настроить SFTP-сервер в Windows с помощью OpenSSH?

Теперь вам нужно настроить OpenSSH в Windows для работы в режиме SFTP.

Включите автозапуск для службы SSHD и запустите ее с помощью следующих команд PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

С помощью PowerShell откройте TCP порт 22 в брандмауэре Windows для входящего трафика SSH:

 New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSHNew-NetFirewallRule - добавить правило для входящего порта 22New-NetFirewallRule - добавить входящее правило порт 22

Примечание. Предыдущая команда не работает в старых версиях настольной Windows. В этом случае используется другая команда: netsh advfirewall firewall add rule name="SSH Port" dir=in action=allow protocol=TCP localport=22

Откройте файл конфигурации SSHD (C:\ProgramData\SSH\sshd_config) в любом текстовом редакторе. Найдите и проверьте значение параметра Подсистема sftp директива. Директива sftp-server.exe файл должен быть указан здесь.файл openssh sshd_config в windowsopenssh sshd_config файл в windows

В конфигурационном файле sshd_config можно дополнительно настроить следующие параметры:

# only allow users in this domain group to connect to OpenSSH
AllowGroups corp\sftp_users
# enable password authentication (SSH keys cannot be used)
AuthenticationMethods password
#default (chrooot) directory for SFTP users  (by default, the user connects to the directory with his profile in the C:\users\username folder)
ChrootDirectory C:\SFTP
ForceCommand internal-sftp
#You can set an individual chrootdirectory for each user:
Match User abrown
ChrootDirectory c:\SFTP\abrown
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

Match User jsmith
ChrootDirectory c:\SFTP\jsmith
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

Подключение к SFTP-серверу с помощью WinSCP или PowerShell

Теперь вы можете подключиться к SSH-серверу Windows с помощью протокола SFTP. Далее мы покажем вам, как подключиться к SFTP-серверу с помощью бесплатной программы WinSCP клиент PowerShell консоль, а также встроенный sftp.exe инструмент.

В окне конфигурации соединения выберите SFTP в качестве протокола передачи файлов, укажите имя сервера и учетные данные учетной записи Windows (используйте параметр user@domain формат для доменных пользователей), которая используется для подключения (также можно настроить аутентификацию с открытым ключом).

Тестовое sftp-соединение WinSCPWinSCP тест sftp-соединения

При первой попытке подключения появляется следующее сообщение о том, что ключ хоста не найден в локальном кэше.

предупреждение о ключе rsa2предупреждение о ключах rsa2

Если все настроено правильно, клиент должен подключиться к SFTP-серверу и отобразить список файлов в домашнем chroot-каталоге пользователя (по умолчанию это каталог профиля пользователя).

Используя привычный интерфейс файлового менеджера (например, Total Commander), вы можете копировать файлы между сервером и клиентом, используя безопасный протокол SFTP.

подключение openssh на сервере windows с помощью winscpподключить openssh на windows server с помощью winscp

Вы можете использовать Posh-SSH модуль для подключения к SFTP-серверу из PowerShell. Вы можете загрузить и установить модуль из галереи PowerShell или в автономном режиме:

Install-Module -Name Posh-SSH

установка модуля posh-ssh в windowsустановить модуль posh-ssh в windows

Чтобы подключиться к SFTP-серверу с помощью пароля, необходимо получить имя пользователя и пароль через Get-Credential:

$usrCreds= Get-Credential

Можно использовать модуль PowerShell SecretManagement для безопасного получения сохраненного пароля из менеджера учетных данных Windows или внешнего хранилища (KeePass, HashiCorp Vault, Azure Key Vault, Bitwarden и т. д.).

Теперь вы можете подключиться к SFTP-серверу:

$SFTPSession = New-SFTPSession -ComputerName 192.168.3.20 -Credential $usrCreds

Теперь вы можете получить список файлов в удаленной директории на SFTP-сервере. В этом примере я получу список файлов на рабочем столе пользователя (в данном случае профилем пользователя будет корневая папка пользователя/chroot)

Get-SFTPChildItem -SFTPSession $SFTPSession -Path "desktop" –Recurse

powershell: список файлов в папке sftppowershell: список файлов в папке sftp

Загрузите файл с удаленного SFTP-сервера:
Get-SFTPItem -SessionId $SFTPSession.SessionId -Path "desktop/OpenVPNScript.log" -Destination c:\PS

Чтобы загрузить файл с вашего компьютера на удаленный SFTP-хост:

Set-SFTPItem -SessionId $SFTPSession.SessionId -Path C:\PS\mytestfile.log -Destination "desktop"

загрузка файлов в sftp с помощью powershellзагрузка файлов в sftp с помощью powershell

Закройте сеанс SFTP:

Remove-SFTPSession -SFTPSession $SFTPSession

В Windows можно использовать встроенную программу sftp.exe консольная команда (устанавливается вместе с клиентом OpenSSH) для подключения к SFTP-серверу.

инструмент sftp.exe в windowssftp.exe инструмент в windows

Подключитесь к sftp-серверу:

sftp [email protected]

Подключение с помощью закрытого ключа ssh:

sftp -i .ssh/id_rsa [email protected]

Список файлов в удаленном каталоге:

pwd

Загрузите файл из SFTP в локальный каталог на вашем компьютере:

get download_this_file_from_sftp.txt

Загрузите файл с компьютера на SFTP-сервер:

put file_to_uplodad.txt

Закрыть сессию:

exit

Настройка аутентификации с открытым ключом SFTP

В Windows можно включить аутентификацию SFTP на основе ключа. В этом случае вы можете аутентифицироваться на SFTP-сервере без ввода пароля.

Подробнее о том, как настроить аутентификацию на основе ключей SSH, читайте в этой статье.
  1. Создайте SSH-ключи на своем компьютере (SFTP-клиент) для пользователя, под которым вы будете подключаться к серверу: ssh-keygen -t ed25519 генерация ssh-ключей для sftp-соединенийгенерировать ssh-ключи для sftp-соединений
  2. Инструмент ssh-keygen создаст два файла id_ed25519 (закрытый ключ для клиентского компьютера) и id_ed25519.pub (открытый ключ для SFTP-сервера);
  3. Теперь необходимо добавить SSH-ключ на сервер Windows (SFTP-хост). Скопируйте файл id_ed25519.pub (или id_rsa.pub в зависимости от типа ключа) в каталог .ssh профиля пользователя, под которым вы будете подключаться к SFTP. Переименуйте файл в authorized_keys (например, для пользователя используется следующий файл ключей max1: C:\Users\max1\.ssh\authorized_keys )

Теперь вы можете использовать id_ed25519 файл для аутентификации на SFTP-сервере. Вы можете задать свой ключ в настройках WinSCP (Дополнительно -> Настройки SSH-соединения > Страница аутентификации -> Файл закрытого ключа).

Если вы хотите использовать SSH-ключ при подключении к SFTP из PowerShell, выполните следующую команду:

New-SFTPSession -ComputerName 192.168.3.20 -Credential remoteuser1 -KeyFile C:\Users\max1\.ssh\id_ed25519" -Verbose

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *