С помощью официального пакета 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 ничего общего. Данные между клиентом и сервером передаются по порту 22 через SSH туннель.
Основные преимущества протокола SFTP:
- Передача файлов и команд происходит внутри защищенной SSH-сессии;
- Для передачи файлов и команд используется одно соединение;
- Поддержка символических ссылок, функций прерывания, возобновления передачи, удаления файла и пр;
- Как правило, на каналах, где FTP работает медленно или с перебоем, SFTP-соединение работает более надежно и быстро;
- Возможность аутентификации с помощью SSH ключей.
Реализация SFTP в системах Windows
Исторически в операционных системах Windows отсутствуют встроенные средства для организации защищенного SFTP сервера. Для этих целей обычно использовались открытые или коммерческие решения, к примеру, Core FTP, FileZilla, CYGWIN, OpenSSH, FTP Shell, IPSwitch и пр. Однако несколько лет назад Microsoft выпустила свою версию порта OpenSSH для win32. Данный проект называется Win32-OpenSSH.
Рассмотрим процесс настройки SFTP сервера в Windows 10 и Windows Server 2016/2012 R2 с помощью пакета Win32-OpenSSH.
Установка Win32 OpenSSH в Windows 10 1803+/Windows Server 2019
В Windows 10, начиная с билда 1803, и в Windows Server 2019 пакет OpenSSH (как и RSAT) уже включен в операционную систему в виде Feature on Demand (FoD).
В Windows 10 и Windows Server 2019 вы можете установить сервер 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).
Исполняемые файлы OpenSSH находятся в каталоге:
c:\windows\system32\OpenSSH\
Конфигурационный файл sshd_config находится в каталоге C:\ProgramData\ssh (каталог создается после первого запуска службы).
Лог — 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 (https://github.com/PowerShell/Win32-OpenSSH/releases). Нам нужна версия для 64 битной версии Windows: OpenSSH-Win64.zip (3,5 Мб).
- Распаковываем содержимое архива в целевой каталог, к примеру:
C:\OpenSSH-Win
- Запускаем командную строку PowerShell с правами администратора и переходим в каталог OpenSSH:
Cd C:\OpenSSH-Win
- Добавьте путь к каталогу OpenSSH в переменную окружения Path;
- Установите сервер OpenSSH:
.\install-sshd.ps1
(должно появиться зеленое сообщение “sshd and ssh-agent services successfully installed”); - Сгенерируйте SSH ключи для сервера (нужны для запуска службы sshd):
ssh-keygen.exe –A
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519
При появлении ошибкиssh-keygen: generating new host keys: RSA Could not save your public key in __PROGRAMDATA__\\ssh/ssh_host_rsa_key.bxKmOcF49P: No such file or directory
, убедитесь, что создан каталог %programdata%\ssh.
- Включите автозапуск для службы 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
- Откройте в любом текстовом редакторе конфигурационный файл «C:\ProgramData\SSH\sshd_config», найдите и проверьте значение директивы Subsystem sftp. Здесь должен быть указан файл sftp-server.exe. Рассмотрим полезные директивы в конфигурационном файле sshd_config:
AllowGroups corp\admingroup # разрешить подключение к OpenSSH только для пользователей из этой группы AuthenticationMethods password # включить аутентификацию по паролю (нельзя использовать ключи SSH) ForceCommand internal-sftp # ChrootDirectory C:\inetpub\wwwroot\ftpfolder #каталог по-умолчнаию для SFTP пользователей
Тестируем SFTP подключение с помощью WinSCP
Попробуем подключиться к поднятому нами SSH серверу по протоколу SFTP. Для этих целей воспользуемся свободным клиентом WinSCP.
В окне настройки подключения выберите протокол передачи файлов SFTP, укажите имя сервера и данные учетной записи Windows, под которой осуществляется подключение (возможно также настроить авторизацию по ключам).При первом подключении появится окно с предупреждением о том, что ключ хоста отсутствует в локальном кеше.
Если все настроено правильно, клиент должен подключиться к SFTP серверу и отобразить список файлов в домашнем каталоге пользователя (по умолчанию каталог с профилем пользователя).
С помощью привычного интерфейса файлового менеджера можно безопасно копировать файлы между сервером и клиентом. Передача файлов будет осуществляться по защищённому протоколу SFTP.
Удаление службы Win32 OpenSSH
Чтобы корректно удалить службу Win32 OpenSSH из системы:
- Откроем консоль Powershell с правами администратора
- Остановим службу SSHD:
Stop-Service sshd
- Удалим службу OpenSSD:Удалим ключи:
.\uninstall-sshlsa.ps1
sshd successfully uninstalled ssh-agent successfully uninstalled
аутентификацию по ключам дает ошибку:
.\install-sshlsa.ps1 : File C:\OpenSSH-Win32\install-sshlsa.ps1 cannot be loaded. The file
C:\OpenSSH-Win32\install-sshlsa.ps1 is not digitally signed. You cannot run this script on the current system. For
more information about running scripts and setting execution policy, see about_Execution_Policies at
http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\install-sshlsa.ps1
+ ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
В свойствах файла install-sshlsa.ps1 нажмите кнопку «Разблокировать» (аналогично статье http://winitpro.ru/index.php/2015/03/06/otklyuchaem-preduprezhdenie-sistemy-bezopasnosti-v-windows-7/#h2_1)
Если не поможет придется либо подписать скрипт, либо разрешить выполнение неподписанных PosH скриптов (только в рамках данной
сессии)
Set-ExecutionPolicy -Scope MachinePolicy -ExecutionPolicy Bypass
Либо политикой:
Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell. “Turn on Script Execution” : Allow all scripts
спасибо за статью. все поднялось, по 22 порту доступно, а есть ссылки на статьи, как добавить авторизацию по ldap или как прописать пользователей, где прописывать шары, на которые будет выкидывать после авторизации. видимо эта статья это часть настройки с 0?
powershell.exe .\install-sshlsa.ps1
выпадает в ошибку:
Произошла ошибка при вызове метода, так как [Microsoft.Win32.RegistryKey] не со держит метод с именем "OpenBaseKey".
D:\openssh-win64\install-sshlsa.ps1:4 знак:50
+ $reg = [Microsoft.Win32.RegistryKey]::OpenBaseKey <<<< ('LocalMachine', 0)
+ CategoryInfo : InvalidOperation: (OpenBaseKey:String) [], Runti
meException
+ FullyQualifiedErrorId : MethodNotFound
Какая ОС?
win7максимальная
у меня на релизе v0.0.14.0 , для устранение етой ошибки надо поменять название файла с C:\OpenSSH-Win32\install-sshlsa.ps1 на C:\OpenSSH-Win32\install-sshd.ps1
Добрый день!
При вооде команды возникает такая ошибка:
C:\OpenSSH-Win> .\ssh-keygen.exe -A
Подскажите как исправить?
Тоже самое
тоже была такая ошибка, решил запуском: .\FixHostFilePermissions.ps1
Решил созданием папки C:\ProgramData\ssh