Поиск по сайту:

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


Вы можете использовать встроенный пакет OpenSSH в Windows, чтобы легко включить безопасную передачу файлов между клиентом и сервером 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.

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

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

Пакет OpenSSH является частью операционной системы в современных сборках Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 в качестве функции по требованию (например, 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-сервер -> Установить).

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

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
  • Исполняемые файлы OpenSSH расположены в каталоге:

    c:\windows\system32\OpenSSH\

    ;

  • Файл конфигурации sshd_config находится в

    C:\ProgramData\ssh

    (данный каталог создается после первого запуска службы sshd);

  • Файл журнала:

    c:\windows\system32\OpenSSH\logs\sshd.log

    ;

  • Файл авторизованных_ключей и ключи хранятся в каталоге:

    %USERPROFILE%\.ssh\

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

  1. Распакуйте архив в целевую папку: C:\OpenSSH-Win;

  2. Откройте приглашение PowerShell с повышенными правами и переключитесь в папку OpenSSH:

    Cd C:\OpenSSH-Win
  3. Добавьте путь к каталогу OpenSSH в переменную среды Путь (Свойства системы -> вкладка «Дополнительно» -> Переменные среды -> Выберите и отредактируйте системную переменную Путь -> Добавьте путь к папке OpenSSH);

  4. Установите сервер OpenSSH:

    .\install-sshd.ps1

    (должно появиться зеленое сообщение «службы sshd и ssh-agent успешно установлены ”);

    Если запуск сценариев PowerShell на вашем компьютере заблокирован политикой выполнения PowerShell, вы можете запустить сценарий с помощью этой команды:

    powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

Как настроить 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 SSH

Примечание. Предыдущая команда не будет работать в старых настольных версиях Windows. В этом случае используется другая команда:

 netsh advfirewall firewall add rule name='SSH Port' dir=in action=allow protocol=TCP localport=22

Откройте файл конфигурации SSHD (

C:\ProgramData\SSH\sshd_config

) в любом текстовом редакторе. Найдите и проверьте значение директивы Subsystem sftp. Здесь должен быть указан файл sftp-server.exe.

В файле конфигурации 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-серверу и отобразить список файлов в домашнем chroot-каталоге пользователя (по умолчанию это каталог профиля пользователя).

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

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

Install-Module -Name Posh-SSH

Чтобы подключиться к 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

Загрузите файл с удаленного 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:

Remove-SFTPSession -SFTPSession $SFTPSession

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

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

sftp user1@192.168.3.20

Подключитесь, используя закрытый ключ ssh:

sftp -i .ssh/id_rsa user1@192.168.3.20

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

pwd

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

get download_this_file_from_sftp.txt

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

put file_to_uplodad.txt

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

exit

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

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

Дополнительную информацию о том, как настроить аутентификацию на основе ключей SSH, можно найти в этой статье.

  1. Создайте на своем компьютере (SFTP-клиенте) SSH-ключи для пользователя, под которым вы будете подключаться к серверу:

    ssh-keygen -t ed25519

  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

Статьи по данной тематике