===== Настройка SFTP (SSH FTP) сервера в Windows ===== ==== Установка 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 (Settings -> Apps -> Optional Features -> Add a feature -> Open SSH Server -> Install). {{ :sftp_windows:ustanovka-openssh-server-v-windows.jpg?nolink |}} Чтобы проверить, установлен ли пакет: Get-WindowsCapability -Online | ? Name -like 'OpenSSH*' Исполняемые файлы OpenSSH находятся в каталоге **C:\windows\system32\OpenSSH\** Конфигурационный файл **sshd_config** находится в каталоге **C:\ProgramData\ssh** (каталог создается после первого запуска службы). Лог — **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). Нам нужна версия для 64 битной версии Windows: OpenSSH-Win64.zip (4,15 Мб). * Распакуйте содержимое архива в целевой каталог, к примеру: **C:\OpenSSH-Win** * Запустите командную строку PowerShell с правами администратора и перейдите в каталог OpenSSH: cd C:\OpenSSH-Win * Добавьте путь к каталогу OpenSSH в переменную окружения Path {{ :sftp_windows:ustanovka-openssh-server-v-windows_2.jpg?nolink |}} * Установите сервер OpenSSH: .\install-sshd.ps1должно появиться зеленое сообщение ''sshd and ssh-agent services successfully installed''.{{ :sftp_windows:ustanovka-openssh-server-v-windows_3.jpg?nolink |}}Если запуск скриптов PowerShell блокируется вашей политикой выполнения, можно запустить скрипт такой командой: powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 ==== Настройка SFTP сервера на базе OpenSSH в Windows ==== Теперь вам нужно настроить OpenSSH для режима SFTP. Включите автозапуск для службы SSHD и запустите ее с помощью следующих PowerShell команд управления службами: Set-Service -Name sshd -StartupType ‘Automatic’ Start-Service sshd С помошью PowerShell отройте в брандмауэре Windows порт TCP 22 для входящего трафика на SSH сервер: New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH {{ :sftp_windows:ustanovka-openssh-server-v-windows_4.jpg?nolink |}} Откройте в любом текстовом редакторе конфигурационный файл **C:\ProgramData\SSH\sshd_config**, найдите и проверьте значение директивы **Subsystem sftp**. Здесь должен быть указан файл **sftp-server.exe**. {{ :sftp_windows:ustanovka-openssh-server-v-windows_5.jpg?nolink |}} Рассмотрим полезные директивы в конфигурационном файле **sshd_config**: # разрешить подключение к OpenSSH только для пользователей из этой группы ''AllowGroups corp\admingroup'' # включить аутентификацию по паролю (нельзя использовать ключи SSH) ''AuthenticationMethods password'' ''ForceCommand internal-sftp'' #каталог для SFTP пользователей (по умолчанию пользователь подключается в каталог со своим профилем в папке **C:\users\username**) ''ChrootDirectory C:\SFTPRoot'' #Для каждого пользователя можно индивидуальную **chrootdirectory**: ''Match User user1'' ''ChrootDirectory c:\SFTPRoot\user1'' ''ForceCommand internal-sftp'' ''X11Forwarding no'' ''AllowTcpForwarding no'' ''Match User user2'' ''ChrootDirectory c:\SFTPRoot\user2'' ''ForceCommand internal-sftp'' ''X11Forwarding no'' ''AllowTcpForwarding no'' ==== Подключение к SFTP серверу с помощью PowerShell и WinSCP ==== Теперь вы может подключиться к вашему SSH серверу на Windows по протоколу SFTP. Ниже мы покажем, как подключиться к SFTP серверу с помощью бесплатного клиента клиент WinSCP, консоли PowerShell и встроенной утилиты **sftp.exe**. В окне настройки подключения выберите протокол передачи файлов SFTP, укажите имя сервера и данные учетной записи Windows (в формате user@domain для доменных пользователей), под которой осуществляется подключение (возможно также настроить авторизацию по ключам). {{ :sftp_windows:ustanovka-openssh-server-v-windows_6.jpg?nolink |}} При первом подключении появится окно с предупреждением о том, что ключ хоста отсутствует в локальном кеше. {{ :sftp_windows:ustanovka-openssh-server-v-windows_7.jpg?nolink |}} Если все настроено правильно, клиент должен подключиться к SFTP серверу и отобразить список файлов в домашнем каталоге пользователя (по умолчанию каталог с профилем пользователя). С помощью привычного интерфейса файлового менеджера можно безопасно копировать файлы между сервером и клиентом по защищённому протоколу SFTP. {{ :sftp_windows:ustanovka-openssh-server-v-windows_8.jpg?nolink |}} Для подключения к SFTP серверу из PowerShell можно использовать модуль **Posh-SSH**. Вы можете скачать установить модуль из PowerShell Gallery или офлайн: Install-Module -Name Posh-SSH {{ :sftp_windows:ustanovka-openssh-server-v-windows_9.jpg?nolink |}} Для подключения к SFTP серверу с помощью пароля, нужно получить имя пользователя и пароль через Get-Credential: $usrCreds= Get-Credential Теперь можно подключиться к вашем SFTPS серверу: $SFTPSession = New-SFTPSession -ComputerName 192.168.13.200 -Credential $usrCreds Теперь вы можете вывести список файлов в удаленном каталоге на SFTP сервере. В этом примере я получу список файлов на рабочем столе пользователя (профиль пользователя в этом случае будет являться корнем) Get-SFTPChildItem -SFTPSession $SFTPSession -Path "desktop" –Recurse {{ :sftp_windows:ustanovka-openssh-server-v-windows_10.jpg?nolink |}} Чтобы скачать файл с удаленного SFTP сервера: Get-SFTPItem -SessionId $SFTPSession.SessionId -Path "desktop/OpenVPNScript.log" -Destination c:\temp Чтобы закачать файл с вашего компьютера на удаленный SFTP хост: Set-SFTPItem -SessionId $SFTPSession.SessionId -Path C:\Temp\mytestfile.log -Destination “desktop” {{ :sftp_windows:ustanovka-openssh-server-v-windows_11.jpg?nolink |}} Завершить SFTP сессию: Remove-SFTPSession -SFTPSession $SFTPSession В Windows вы можете использоваться встроенную утилиту **sftp.exe** (устанавливается вместе с клиентом OpenSSH) для подключения к SFTP серверу. Подключиться к sftp серверу: sftp user1@192.168.13.200 Подключиться с помощью ssh ключа: sftp -i .ssh/id_rsa user1@192.168.13.200 Вывести список файлов в удаленном каталоге: pwd Скачать файл с SFTP в локальный каталог на ваш компьютер: get file-test1.txt Загрузить файл с вашего компьютера на SFTP сервер: put file-test2.txt Закрыть сессию: exit {{ :sftp_windows:ustanovka-openssh-server-v-windows_12.jpg?nolink |}} Источник https://winitpro.ru/index.php/2016/03/31/sftp-ssh-ftp-na-windows-server-2012-r2/