Падлучэнне да Windows па SSH як у Linux

Мяне заўсёды гняло падлучэнне да Windows машын. Не, я не супернік і не прыхільнік Microsoft і іх прадуктаў. Кожны прадукт існуе для сваёй мэты, але гаворка не пра гэта.
Для мяне заўсёды было пакутліва балюча падлучацца да сервераў з Windows, таму што гэтыя падлучэнні альбо наладжваюцца праз адно месца (прывітанне WinRM з HTTPS) альбо працуюць не вельмі стабільна (прывітанне RDP да віртуалак за акіянам).

Таму, выпадкова натыкнуўшыся на праект Win32-OpenSSH, я вырашыў падзяліцца вопытам наладкі. Магчыма каму-небудзь гэты тулза зэканоміць кучу нерваў.

Падлучэнне да Windows па SSH як у Linux

Варыянты ўстаноўкі:

  1. ўручную
  2. Праз пакет шакаладным
  3. Праз Ansible, напрыклад роля jborean93.win_openssh

Далей я буду расказваць пра першы пункт, бо з астатнімі і так усё больш менш зразумела.

Адзначу, што гэты праект пакуль што знаходзіцца на стадыі beta, таму яго не рэкумендуюць выкарыстоўваць у production.

Такім чынам, спампоўваем апошні рэліз, на бягучы момант гэта 7.9.0.0p1-beta. Ёсць версіі як для 32 так і для 64 бітных сістэм.

Распакоўваем у C:Program FilesOpenSSH
Абавязковы момант для карэктнай працы: правы на запіс у гэтай дырэкторыі павінны быць толькі ў СІСТЭМА і ў адмінскай групы.

Усталёўваны сэрвісы скрыптам 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:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String -Force

Удакладненне: Неабходна ўказваць абсалютны шлях.

Што далей?

А далей наладжваем sshd_config, які размесцім у C:ProgramDatassh. напрыклад:

PasswordAuthentication no
PubkeyAuthentication yes

І ствараем у карыстацкай тэчцы дырэкторыю .ssh, а ў ёй файл аўтарызаваныя_ключы. Туды запісваем публічныя ключы.

Важнае ўдакладненне: правы на запіс у гэты файл, павінен мець толькі карыстач, у чыёй дырэкторыі ляжыць файл.

Але калі ў вас праблемы з гэтым, заўсёды можна выключыць праверку правоў у канфігу:

StrictModes no

Дарэчы, у C:Program FilesOpenSSH ляжаць 2 скрыпты (FixHostFilePermissions.ps1, FixUserFilePermissions.ps1), якія павінны але не абавязаны фіксаваць правы, у тым ліку і з аўтарызаваныя_ключы, але чамусьці не фіксяць.

Не забываецца перазапускаць сэрвіс SSHD пасля для прымянення змен.

ru-mbp-666:infrastructure$ ssh [email protected] -i ~/.ssh/id_rsa
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.

PS C:UsersAdministrator> 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:UsersAdministrator>

Суб'ектыўныя плюсы/мінусы.

Плюсы:

  • Стандартны падыход да падлучэння да сервераў.
    Калі ёсць крыху Windows машын, вельмі няёмка калі:
    Так, сюды мы ходзім па ssh, а тут РДП,
    і наогул best-practice з бастыёнамі, спачатку ssh-тунэль, а праз яго RDP.
  • Прастата налады
    Лічу, што гэта відавочна.
  • Хуткасць падлучэння і працы з выдаленай машынай
    Няма графічнай абалонкі, эканомяцца як рэсурсы сервера, так і колькасць перадаваных дадзеных.

Мінусы:

  • Не замяняе RDP цалкам.
    Не ўсё можна зрабіць з кансолі, нажаль. Я маю на ўвазе сітуацыі, калі патрабуецца GUI.

Матэрыялы выкарыстаныя ў артыкуле:
Спасылка на сам праект
Варыянты ўстаноўкі бессаромна скапіяваныя з Ansible docs.

Крыніца: habr.com

Дадаць каментар