Вы можете использовать официальный пакет OpenSSH для Windows, чтобы легко организовать безопасную передачу файлов между клиентом и сервером Windows, используя протокол SFTP ( Secure FTP ).
В этой статье мы покажем, как использовать Win32-OpenSSH для запуска SFTP-сервера в Windows 10 или Windows Server 2016 / 2012R2.
Что такое SFTP?
SFTP ( Secure File Transfer Protocol , Secure FTP или SSH FTP ) является расширением протокола SSH, являющегося стандартом в мире систем UNIX / Linux. С точки зрения пользователя, он похож на FTP, но на самом деле это совершенно другой протокол, не имеющий ничего общего с FTP . Данные передаются между клиентом и сервером через туннель SSH (TCP-порт 22).
Основные преимущества SFTP:
- Файлы и команды передаются в безопасном сеансе SSH;
- Одно соединение используется для отправки файлов и команд;
- Поддерживаются символические ссылки, передача прерываний / возобновлений, функции удаления файлов и т. Д .;
- Как правило, в каналах, где FTP работает медленно или не работает, SFTP-соединение работает быстрее и надежнее;
- Возможность аутентификации с использованием ключей SSH.
Не путайте протоколы SFTP и FTPS. По сути, FTPS — это простой FTP с сертификатом SSL, а SFTP — это протокол для отправки данных и команд FTP внутри сеанса SSH.
Реализация SFTP в Windows
Исторически операционные системы Windows не предоставляют никаких встроенных инструментов для запуска защищенного SFTP-сервера. Для этих целей использовались открытые или проприетарные решения, такие как Core FTP, FileZilla, CYGWIN, OpenSSH, FTP Shell, IPSwitch и т. Д. Однако несколько лет назад Microsoft выпустила свою версию порта OpenSSH для Win32. Этот проект называется Win32-OpenSSH .
Рассмотрим конфигурацию SFTP-сервера под управлением Windows 10 или Windows Server 2019/2016/2012 R2 с использованием пакета Win32 OpenSSH .
Установка Win32 OpenSSH на Windows 10 1803+ / Windows Server 2019
В Windows 10 build 1803 и новее, а также в Windows Server 2019 пакет OpenSSH уже включен в операционную систему в форме Feature on Demand (FoD), такой как RSAT .
Вы можете установить сервер OpenSSH в Windows 10 и Windows Server 2019, используя следующий командлет PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Server*
Или используя DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Также вы можете добавить OpenSSH сервер из Windows 10 GUI ( Настройки -> Приложения -> Дополнительные функции -> Добавить функцию -> Открыть SSH Server -> Установить ).
- Исполняемые файлы OpenSSH находятся в каталоге
c:\windows\system32\OpenSSH\
:; - Sshd_config файл конфигурации находится в каталоге:
C:\ProgramData\ssh
(этот каталог создается после первого запуска службы Sshd); - Лог — файл:
c:\windows\system32\OpenSSH\logs\sshd.log
; - Файл и ключи authorized_keys хранятся в директории:
%USERPROFILE%\.ssh\
.
Установите Win32 OpenSSH на Windows Server 2016/2012 R2
В предыдущих версиях Windows 10 и Windows Server 2016/2012 R2 необходимо загрузить и установить OpenSSH с GitHub. Вам необходимо скачать версию пакета для Windows x64: OpenSSH-Win64.zip (3,5 МБ).
- Распакуйте архив в целевой каталог: C: \ OpenSSH-Win;
- Запустите привилегированный клиент PowerShell и перейдите в папку OpenSSH:
Cd C:\OpenSSH-Win
- Добавьте путь к каталогу OpenSSH в переменную среды Path (Свойства системы -> вкладка «Дополнительно» -> Переменные среды -> Выберите и измените системную переменную Path -> Добавить путь к папке OpenSSH);
- Установите сервер OpenSSH:
.\install-sshd.ps1
(должно появиться зеленое сообщение « Службы sshd и ssh-agent успешно установлены »);
- Сгенерируйте ключи SSH для сервера (необходим для запуска службы sshd):
ssh-keygen.exe –A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
- Включите автозапуск для службы SSHD и запустите его, используя следующие команды управления службой PowerShell:
Set-Service -Name sshd -StartupType ‘Automatic’
Start-Service sshd
- Перезагрузите компьютер:
Restart-Computer
- Используйте 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:
AllowGroups corp\sftp_users #
разрешить подключение к OpenSSH только пользователям этой доменной группы
AuthenticationMethods password #
включить аутентификацию по паролю (ключи SSH не могут быть использованы)
ForceCommand internal-sftp
ChrootDirectory C:\inetpub\wwwroot\ftpfolder #
каталог по умолчанию для пользователей SFTP
Тестирование SFTP-соединения с использованием WinSCP
Попробуем подключиться к созданному SSH-серверу по протоколу SFTP. Для этого используйте бесплатный клиент WinSCP .
В окне конфигурации подключения выберите SFTP в качестве протокола передачи файлов, укажите имя сервера и учетные данные учетной записи Windows, которая используется для подключения (также можно настроить проверку подлинности ключа).
При первой попытке подключения появляется следующее уведомление о ключе хоста, не найденном в локальном кэше.
Если все настроено правильно, клиент подключится к SFTP-серверу и отобразит список файлов в домашнем каталоге пользователя (по умолчанию это каталог с профилем пользователя).
Используя знакомый интерфейс файлового менеджера ( например, Total Commander ), вы можете копировать файлы между сервером и клиентом. Файлы передаются с использованием безопасного SFTP.
Как удалить Win32 OpenSSH?
Чтобы правильно удалить Win32 OpenSSH из вашей системы:
- Запустите сеанс PowerShell с повышенными правами;
- Остановите службу SSHD:
Stop-Service sshd
- Удалите службу sshd:
.\uninstall-sshlsa.ps1
12<span>sshd успешно удален</span><span>ssh-agent успешно удален</span>