Настройка 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 МБ).
Распакуйте архив в целевую папку: C:\OpenSSH-Win;
-
Откройте приглашение PowerShell с повышенными правами и переключитесь в папку OpenSSH:
Cd C:\OpenSSH-Win Добавьте путь к каталогу OpenSSH в переменную среды Путь (Свойства системы -> вкладка «Дополнительно» -> Переменные среды -> Выберите и отредактируйте системную переменную Путь -> Добавьте путь к папке OpenSSH);
Установите сервер 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, можно найти в этой статье.
Создайте на своем компьютере (SFTP-клиенте) SSH-ключи для пользователя, под которым вы будете подключаться к серверу:
ssh-keygen -t ed25519Инструмент ssh-keygen сгенерирует два файла id_ed25519 (закрытый ключ для клиентского компьютера) и id_ed25519.pub (открытый ключ для SFTP-сервера);
Теперь вам нужно добавить ключ SSH на сервер Windows (хост SFTP). Скопируйте файл id_ed25519.pub (или id_rsa.pub в зависимости от типа ключа) в каталог .ssh профиля пользователя, под которым вы будете подключаться к SFTP. Переименуйте файл в authorized_keys (например, для пользователя используется следующий файл ключей).
max1C:\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











