===== Настройка 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/