Podłączenie do Windows przez SSH jak w Linuxie

Zawsze miałem problemy z łączeniem się z systemami Windows. Nie jestem przeciwnikiem ani zwolennikiem Microsoft i ich produktów. Każdy produkt istnieje w określonym celu, ale to nie jest temat tej rozmowy.
Zawsze było dla mnie bolesne łączenie się z serwerami Windows, ponieważ te połączenia są albo konfigurowane w dziwny sposób (witaj WinRM z HTTPS), albo działają niezbyt stabilnie (cześć RDP do wirtualek za oceanem).

Dlatego przypadkowo natknąłem się na projekt Win32-OpenSSH, postanowiłem podzielić się swoim doświadczeniem w konfiguracji. Może ta narzędzie zaoszczędzi komuś sporo nerwów.

Podłączenie do Windows przez SSH jak w Linuxie

Opcje instalacji:

  1. Ręcznie
  2. Przez pakiet Chocolatey
  3. Przez Ansible, na przykład rolę jborean93.win_openssh

Dalej będę opowiadał o pierwszym punkcie, ponieważ pozostałe są w miarę jasne.

Zaznaczam, że projekt jest obecnie na etapie beta, więc nie zaleca się używania go w produkcji.

Zatem pobieramy najnowszą wersję, obecnie jest to 7.9.0.0p1-beta. Istnieją wersje zarówno dla systemów 32-, jak i 64-bitowych.

Rozpakowujemy do C:Program FilesOpenSSH
Obowiązkowy moment dla prawidłowego działania: uprawnienia do zapisu w tym katalogu powinny mieć tylko SYSTEM i grupa administratorów.

Instalujemy usługi za pomocą skryptu install-sshd.ps1 znajdującego się w tym katalogu

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

Zezwalamy na przychodzące połączenia na porcie 22:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Wyjaśnienie: aplet New-NetFirewallRule jest używany w systemach Windows Server 2012 i nowszych. W najstarszych systemach (lub desktopowych) można użyć polecenia:

netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22

Uruchamiamy usługę:

net start sshd

Podczas uruchamiania zostaną automatycznie wygenerowane klucze hosta (jeśli nie istnieją) w %programdata%ssh

Autostart usługi przy uruchomieniu systemu możemy włączyć poleceniem:

Set-Service sshd -StartupType Automatic

Można również zmienić domyślną powłokę poleceń (po instalacji, domyślnie — cmd):

New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String -Force

Wyjaśnienie: Należy podać ścieżkę bezwzględną.

Co dalej?

A następnie konfigurujemy sshd_config, który znajduje się w C:ProgramDatassh. Na przykład:

PasswordAuthentication no
PubkeyAuthentication yes

I tworzymy w katalogu użytkownika folder .ssh, a w nim plik authorized_keys. Wpisujemy tam klucze publiczne.

Ważne wyjaśnienie: prawa do zapisu w tym pliku ma tylko użytkownik, w którego katalogu znajduje się plik.

Jednak jeśli masz z tym problemy, zawsze możesz wyłączyć sprawdzanie praw w konfiguracji:

StrictModes no

A propos, w C:Program FilesOpenSSH są dwa skrypty (FixHostFilePermissions.ps1, FixUserFilePermissions.ps1), które powinny, ale nie muszą naprawiać prawa, w tym także z authorized_keys, ale jakoś ich nie naprawiają.

Nie zapomnij ponownie uruchomić usługi sshd po to, aby zastosować zmiany.

ru-mbp-666:infrastructure$ ssh Administrator@192.168.1.10 -i ~/.ssh/id_rsa
Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. Wszelkie prawa zastrzeżone.

PS C:UsersAdministrator> Get-Host


Nazwa             : ConsoleHost
Wersja           : 5.1.14393.2791
IdInstancji      : 653210bd-6f58-445e-80a0-66f66666f6f6
InterfejsUI      : System.Management.Automation.Internal.Host.InternalHostUserInterface
AktualnaKultura  : en-US
AktualnaKulturaUI: en-US
DanePrywatne     : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerWłączony  : Prawda
CzyRunspacePushed : Fałsz
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

PS C:UsersAdministrator>

Subiektywne plusy/minusy.

Zalety:

  • Standardowe podejście do łączenia z serwerami.
    Kiedy jest kilka maszyn z Windows, bardzo niewygodnie jest, gdy:
    Tutaj łączymy się przez ssh, a tu rdp,
    i w ogóle best-practice z bastionami, najpierw tunel ssh, a przez niego RDP.
  • Łatwość konfiguracji
    Uważam, że to oczywiste.
  • Szybkość połączenia i pracy z zdalną maszyną
    Brak interfejsu graficznego oszczędza zarówno zasoby serwera, jak i ilość przesyłanych danych.

Wady:

  • Nie zastępuje całkowicie RDP.
    Nie wszystko można zrobić z konsoli, niestety. Mam na myśli sytuacje, gdy wymagany jest GUI.

Materiały użyte w artykule:
Link do samego projektu
Opcje instalacji skopiowane bezwstydnie z Ansible docs.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster