Для меня всегда было мучительно больно подключаться к серверам с Windows, потому что эти подключения либо настраиваются через одно место (привет WinRM с HTTPS) либо работают не очень стабильно (здравствуй RDP к виртуалкам за океаном).
Поэтому, случайно натолкнувшись на проект Win32-OpenSSH, я решил поделиться опытом настройки. Возможно кому-нибудь эта тулза сэкономить кучу нервов.
Варианты установки:
- Вручную
- Через пакет Chocolatey
- Через Ansible, например роль jborean93.win_openssh
Далее я буду рассказывать про первый пункт, так как с остальными и так все более менее понятно.
Отмечу, что данный проект пока что находится на стадии beta, поэтому его не рекомендуют использовать в production.
Итак, скачиваем последний релиз, на текущий момент это 7.9.0.0p1-beta. Есть версии как для 32 так и для 64 битных систем.
Распаковываем в C:\Program Files\OpenSSH
Обязательный момент для корректной работы: права на запись в этой директории должны быть только у SYSTEM и у админской группы.
Устанавливаем сервисы скриптом install-sshd.ps1 находящимся в этой директории
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
Разрешаем входящие подключения на 22 порт:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Уточнение: апплет New-NetFirewallRule используется на Windows Server 2012 и новее. В наиболее старых системах (либо десктопных) можно воспользоваться командой:
netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22
Запускаем сервис:
net start sshd
При запуске будут автоматически сгенерированы хост-ключи (если отсутствуют) в %programdata%\ssh
Автозапуск сервиса при запуске системы мы можем включить командой:
Set-Service sshd -StartupType Automatic
Так же, можно сменить командную оболочку по умолчанию (после установки, по умолчанию — cmd):
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Уточнение: Необходимо указывать абсолютный путь.
Что дальше?
А дальше настраиваем sshd_config, который расположем в C:\ProgramData\ssh. Например:
PasswordAuthentication no
PubkeyAuthentication yes
И создаем в пользовательской папке директорию .ssh, а в ней файл authorized_keys. Туда записываем публичные ключи.
Важное уточнение: права на запись в этот файл, должен иметь только пользователь, в чьей директории лежит файл.
Но если у вас проблемы с этим, всегда можно выключить проверку прав в конфиге:
StrictModes no
К слову, в C:\Program Files\OpenSSH лежат 2 скрипта (FixHostFilePermissions.ps1, FixUserFilePermissions.ps1), которые должны
Не забывается перезапускать сервис sshd после для применения изменений.
ru-mbp-666:infrastructure$ ssh Administrator@192.168.1.10 -i ~/.ssh/id_rsa
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
PS C:\Users\Administrator> Get-Host
Name : ConsoleHost
Version : 5.1.14393.2791
InstanceId : 653210bd-6f58-445e-80a0-66f66666f6f6
UI : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture : en-US
CurrentUICulture : en-US
PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled : True
IsRunspacePushed : False
Runspace : System.Management.Automation.Runspaces.LocalRunspace
PS C:\Users\Administrator>
Субъективные плюсы/минусы.
Плюсы:
- Стандартный подход к подключению к серверам.
Когда есть немного Windows машин, очень неудобно когда:
Так, сюда мы ходим по ssh, а тут рдп,
и вообще best-practice с бастионами, сначала ssh-туннель, а через него RDP. - Простота настройки
Считаю что это очевидно. - Скорость подключения и работы с удаленной машиной
Нет графической оболочки, экономятся как ресурсы сервера, так и количество передаваемых данных.
Минусы:
- Не заменяет RDP полностью.
Не все можно сделать из консоли, увы. Я имею ввиду ситуации, когда требуется GUI.
Материалы использованные в статье:
Ссылка на сам проект
Варианты установки бессовестно скопированы с Ansible docs.
Комментарии (25)
red75prim
28.05.2019 10:22Ну и, начиная с августа 2018-го, OpenSSH включен в Windows 10 и Windows Server 2019.
https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_overview
eliduvid
28.05.2019 11:37Так ещё можно настроить подключение прямо в WSL. Вопрос только зачем тут windows))
Ryav
28.05.2019 11:51SFTP работает?
А если через WSL идти, то работать будет в том случае, если есть активная сессия?
kashtan404 Автор
28.05.2019 12:11Sftp работает:
ru-mbp-666:infrastructure $ sftp -P 22 Administrator@192.168.1.10 Connected to Administrator@192.168.1.10. sftp> ls AppData Application Data Contacts Cookies ...
На счет wsl не в курсе, server 2012r2, увы.
esata
28.05.2019 12:19Насколько я знаю OpenSSH сервер и клиент уже есть в последних сборках Windows 10. OpenSSH активируется в компонентах Windows.
kovserg
28.05.2019 17:03Круто, а mc и vim работают?
Ryav
28.05.2019 19:21Не совсем понял вопрос. MC нет под виндовс (но есть через WSL, хотя кому он нужен при наличии Far?), vim есть под виндовс, но не запускал его в консольном режиме, тут не знаю.
kashtan404 Автор
28.05.2019 21:55Думаю, что произошло недопонимание. SSH — протокол с помощью которого можно подключиться к удаленному хосту и получить доступ к его командной оболочке. Которой будет выступать bash, sh, ksh и прочие, или, в случае с виндой — cmd, powershell. А дальше, все так, как верно заметил Ryav.
Supme
28.05.2019 21:58А Far работает в консоли через ssh?
kashtan404 Автор
29.05.2019 11:12Запускаться — запускается. Но есть проблемы с отрисовкой.
Разорваный farlegolegs
29.05.2019 15:04MC нет под виндовс
В цигвине всё есть.kashtan404 Автор
29.05.2019 17:12В сигниве все есть, но MC под винду все равно нет.
legolegs
29.05.2019 17:23А если это не под виндой, то где?
kashtan404 Автор
29.05.2019 17:46Смотрите:
1) Любой экзешник можно переименовать
2) Разговор идет о консольном приложении которое бы нативно работало с win32 а не через прокладки posix-to-win32
Поэтому:
— Ваш скрин не показателен
— Подозреваю что это
igi7
29.05.2019 02:59ну как это поставить понятно, хотя лично мне ближе вариант microsoft store > ubuntu > install > apt-get install openssh-server -y
а какие варианты применения этого?ranebull
29.05.2019 10:18На серверных версиях Windows нет ни Microsoft Store, ни WSL и ваш метод не подходит.
В статье как раз описано применение именно для серверной версии.
osipov_dv
отсутствие su и sudo убивает удаленное администрирование винды по ssh…
Kobalt_x
runas
osipov_dv
это только su, причем довольно куцая замена, так как нет возможности сделать под root вход под любым пользователем не зная его.
Как быть с UAC, и получением полных прав из консоли?
DaemonGloom
Тут лучше пользоваться psexec, который умеет и права поднять, и под другим пользователем запустить.
osipov_dv
Его нет из коробки, следовательно он бесполезен.