- Установка и настройка SFTP сервера (SSH FTP) в Windows на базе OpenSSH
- Особенности протокола SFTP
- Реализация SFTP в системах Windows
- Установка Win32 OpenSSH в Windows 10 1803+/Windows Server 2019
- Установка Win32 OpenSSH на Windows Server 2016/2012 R2
- Тестируем SFTP подключение с помощью WinSCP
- Удаление службы Win32 OpenSSH
- Установить OpenSSH на Server 2012 R2
Установка и настройка SFTP сервера (SSH FTP) в Windows на базе OpenSSH
С помощью официального пакета 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
Или можно установить OpenSSH из графического интерфейса Windows 10 (Settings -> Apps -> Optional Features -> Add a feature -> Open SSH Server -> Install).
Исполняемые файлы OpenSSH находятся в каталоге:
Конфигурационный файл sshd_config находится в каталоге C:\ProgramData\ssh (каталог создается после первого запуска службы).
Файл 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
, убедитесь, что создан каталог %programdata%\ssh.
Тестируем SFTP подключение с помощью WinSCP
Попробуем подключиться к поднятому нами SSH серверу по протоколу SFTP. Для этих целей воспользуемся свободным клиентом WinSCP.
В окне настройки подключения выберите протокол передачи файлов SFTP, укажите имя сервера и данные учетной записи Windows, под которой осуществляется подключение (возможно также настроить авторизацию по ключам).При первом подключении появится окно с предупреждением о том, что ключ хоста отсутствует в локальном кеше.
Если все настроено правильно, клиент должен подключиться к SFTP серверу и отобразить список файлов в домашнем каталоге пользователя (по умолчанию каталог с профилем пользователя).
С помощью привычного интерфейса файлового менеджера можно безопасно копировать файлы между сервером и клиентом. Передача файлов будет осуществляться по защищённому протоколу SFTP.
Удаление службы Win32 OpenSSH
Чтобы корректно удалить службу Win32 OpenSSH из системы:
- Откроем консоль Powershell с правами администратора
- Остановим службу SSHD: Stop-Service sshd
- Удалим службу OpenSSD:Удалим ключи: .\uninstall-sshlsa.ps1
Установить OpenSSH на Server 2012 R2
Пролистывая задачи на фриланс биржах наткнулся на такой вопрос — просьба поставить на Windows Server 2012 R2 сервис для безопасного подключения через SSH, т. к. на другом конце — сотрудник имевший в свою очередь практическое знакомство только с Linux серверами и ему консоль ближе. Данная тема также интересна, помнится мне что ранее я уже разбирал как поставить возможность подключения к Windows 7 через ssh, сейчас же разберу и для текущей задачи.
Итак есть установленная система из оригинального образа Windows Server 2012 R2 (English), имеется одна учетная запись Administrator с паролем 712mbddr@, некоторые действия будут браться из ранее опубликованной.
На момент написания данной заметки версия Cygwin — 2.876, а версия пакета openssh: — 7.3p1-2
Далее запускаю терминал cygwin:
Win +X — Command Prompt (Admin) —
$ и мигает курсор ожидающий ввода команд
Генерируем ключи доступа (публичный и приватный):
$ ssh-host-config -y
*** Query: Please enter the password: 712mbddr@
*** Query: Reenter: 712mbddr@
Теперь переключаюсь через сочетание клавиш Alt + Tab во все еще открытое окно командной строки Windows и настраиваю правила для брандмауэра:
C:\Windows\system32>sc config sshd start= auto
C:\Windows\system32>net start sshd
C:\Windows\system32>netsh advfirewall firewall add rule name=»SSH Server» dir=in protocol=tcp localport=22 action=allow
C:\Windows\system32>netstat -an | findstr :22
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING
TCP [::]:22 [::]:0 LISTENING
Если же нужно повесить сервис SSH на другой порт , то за редактирование следует обратиться к конфигурационному файлу который находится если через Alt +Tab переключиться в bash консоль или вызвать bat файл запускающий ее: C:\Cygwin\Cygwin.bat
( На заметку: работа с консольным редактором vi по аналогии, как и в Ubuntu)
$ vi /etc/sshd_config
После нажимаю: Esc → :wq!
На заметку: вообще это честно говоря пародия на bash консоль, т. к. не с первого раза отрабатывает переключение в режим редактирования, да и странным образом ведут себя другие команды. А потому советую перед боевым редактированием сперва сделать резервную копию редактируемого файла.
,либо же не переключаюсь в консоль Cygwin, вызвать текстовый редактор notepad и отредактировать конфиг:
C:\Windows\system32>notepad c:\Cygwin\etc\sshd_config
вот только все форматирование хромает, да и при сохранении не удается сохранить файл без расширения.
Все же лучше поставить простой редактор nano. Для этого запускаем скачанный файл: setup-x86_64.exe, далее все как обычно указываем сервер и пакет: nano
$ nano /etc/sshd_config
После: Ctrl + O, Ctrl + X и все, чем проще тем лучше.
Теперь нужно перезапустить сервис sshd для активации изменений:
(Остановить сервис sshd)
$ cygrunsrv.exe -E sshd
(Запустить сервис sshd)
$ cygrunsrv.exe -S sshd
или по старинке:
$ net stop sshd
The CYGWIN sshd service is stopping.
The CYGWIN sshd service was stopped successfully.
$ net start sshd
The CYGWIN sshd service is starting.
The CYGWIN sshd service was started successfully.
И если было настроено правило в брандмауэре на 22 порт, то видоизменяем правило:
$ netsh advfirewall firewall show rule name=all | findstr «SSH»
Rule Name: SSH Server
$ netsh advfirewall firewall set rule name=»SSH Server» new localport=22777
Updated 1 rule(s).
Проверяем, что можно с Ubuntu 12.04.5 Desktop amd64 системы подключиться к Windows Server 2012 R2 через ssh:
$ ssh -l Administrator 10.7.8.193 -p 22777
The authenticity of host ‘[10.7.8.193]:22777 ([10.7.8.193]:22777)’ can’t be established.
ECDSA key fingerprint is 42:4e:f6:93:5c:f4:39:bc:44:a7:68:e9:92:de:05:e7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘[10.7.8.193]:22777’ (ECDSA) to the list of known hosts.
Administrator@10.7.8.193’s password: 712mbddr@
$ net stop Themes
The Themes service is stopping.
The Themes service was stopped successfully.
Итого подключение успешно прошло, а если нужно поставить какое либо ПО (пакет lynx) без необходимости запускать инсталлятор (GUI оболочку) то сделать это можно так:
$ cd c:/Users/Administrator/Downloads/
$ cygcheck.exe -p ‘lynx’ | grep lynx
Found 12 matches for lynx
lynx-debuginfo-2.8.7-2 — lynx-debuginfo: Debug info for lynx (installed binaries and support files)
lynx-2.8.7-2 — lynx: A text-based Web Browser (installed binaries and support files)
lynx-2.8.7-2-src — lynx: A text-based Web Browser (source code)
$ ./setup-x86_64.exe —root c:/Cygwin —no-desktop —no-shortcuts —no-startmenu —quiet-mode -q -P lynx
Starting cygwin install, version 2.876
User has backup/restore rights
Current Directory: c:/Cygwin
Could not open service McShield for query, start and stop. McAfee may not be installed, or we don’t have access.
root: c:\Cygwin system
Selected local directory: c:/Cygwin
Extracting from file://c:/Cygwin/http%3a%2f%2fcygwin.mirror.constant.com%2f/x86_64/release/lynx/lynx-2.8.7-2.tar.bz2
Changing gid back to original
running: c:\Cygwin\bin\dash.exe «/etc/postinstall/0p_000_autorebase.dash»
running: c:\Cygwin\bin\dash.exe «/etc/postinstall/0p_update-info-dir.dash»
running: c:\Cygwin\bin\bash.exe —norc —noprofile «/etc/postinstall/lynx.sh»
Changing gid to Administrators
Ending cygwin install
На заметку: также можно ставить несколько пакетов просто перечисляя их после ключа: -P tar,wget,lynx,unrar
Что еще, вроде как есть специальный пакет на подобии утилиты apt-get как в Ubuntu и с его помощью можно устанавливать пакеты привычным мне способом:
$ wget raw.github.com/transcode-open/apt-cyg/master/apt-cyg
$ chmod +x apt-cyg
$ mv apt-cyg c:/Cygwin/bin/
$ apt-cyg install curl
—2016-09-19 11:45:49— http://cygwin.mirror.constant.com//x86_64/release/curl/curl-7.50.3-1.tar.xz
Resolving cygwin.mirror.constant.com (cygwin.mirror.constant.com)… 108.61.5.83
Connecting to cygwin.mirror.constant.com (cygwin.mirror.constant.com)|108.61.5.83|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 289508 (283K) [application/octet-stream]
Saving to: ‘curl-7.50.3-1.tar.xz’
и далее, весь вывод установки приводить здесь не имеет смысла главное его конечная цель — пакет установлен.
Ладно что-то я отклонился от темы данной заметки, но все равно любой представленный материал у меня на блоге полезен. Так хоть и не совсем тривиальной был разбор как же все-таки установить openssh сервер на Windows Server 2012 R2 с упором на командную строку, с GUI же конечно же было бы проще, но нужно всегда заходить к решению проблемы с того, чего может не оказаться под рукой. А с помощью этой заметки я показал, как все же сделать. Итого, заметка функциональна и практична, на этом я прощаюсь, с уважением автор блога — ekzorchik.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще 🙂
Карта МКБ: 4432-7300-2472-8059
Yandex-деньги: 41001520055047
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.