openssh

Począwszy od Windows 10 1809 i Windows Server 2019, system operacyjny ma zintegrowany serwer SSH oparty na OpenSSH. W tym artykule pokażemy, jak zainstalować i skonfigurować serwer OpenSSH w systemie Windows 10 i połączyć się z nim zdalnie przy użyciu bezpiecznego protokołu SSH (cóż, tak jak w Linuksie 🙂).

Możesz zainstalować serwer OpenSSH we wcześniejszych wersjach systemu Windows, ale w tym celu musisz pobrać i zainstalować port OpenSSH dla win32 z GitHub - Win32-OpenSSH (https://github.com/powershell/Win32-OpenSSH). Przykład instalacji i konfiguracji Win32-OpenSSH znajduje się w artykule „Instalowanie i konfigurowanie serwera SFTP (SSH FTP) w systemie Windows”.

Treść

  • Instalowanie serwera OpenSSH w systemie Windows
  • Konfigurowanie serwera SSH w systemie Windows
  • Sshd_config: Plik konfiguracyjny serwera OpenSSH
  • Połącz się z Windows 10 przez SSH

Instalowanie serwera OpenSSH w systemie Windows

Zobaczmy, jak zainstalować składnik OpenSSH Server w Windows 10 1903 (Windows Server 2019 robi to samo).

OpenSSH (jak RSAT) jest już zawarty w tych wersjach systemu Windows jako Feature on Demand (FoD).

Jeśli masz bezpośrednie połączenie z Internetem, możesz zainstalować serwer OpenSSH za pomocą PowerShell

Dodaj-Windows Możliwości -Online -Nazwa OpenSSH.Server *

Lub używając DISM:

dism / Online / Add-Capability /CapabilityName:OpenSSH.Server~~.0.0.0.0

W systemie Windows 10 ten składnik można również zainstalować za pomocą panelu Opcje (Aplikacje -> Zarządzaj dodatkowymi składnikami -> Dodaj składnik). Znajdź na liście Otwórz serwer ssh i naciśnij przycisk Zainstaluj).

Aby sprawdzić, czy serwer OpenSSH jest zainstalowany, uruchom:
Get-WindowsCapability -Online | ? Jak nazwa „OpenSSH.Ser *”

Stan: Zainstalowany

Konfigurowanie serwera SSH w systemie Windows

Po zarejestrowaniu serwera OpenSSH w systemie Windows musisz zmienić typ uruchomienia usługi sshd aby automatycznie i uruchomić usługę za pomocą PowerShell:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

Korzystając z nestat, upewnij się, że serwer SSH działa teraz w systemie i czeka na połączenia na porcie 22:

netstat -na | znajdź „: 22”

Sprawdź, czy włączona jest reguła Zapory systemu Windows Defender, która zezwala na połączenia przychodzące do systemu Windows za pośrednictwem protokołu TCP / 22.

Get-NetFirewallRule -Name * OpenSSH-Server * | select Name, DisplayName, Description, Enabled

Nazwa Nazwa wyświetlana Opis Włączone ---- ----------- ----------- ------- Serwer OpenSSH-W-TCP Serwer OpenSSH SSH (sshd) Reguła przychodząca dla serwera OpenSSH SSH (sshd) Prawda

Jeśli reguła jest wyłączona (Enabled = False) lub jej brakuje, możesz utworzyć nową regułę przychodzącą za pomocą polecenia New-NetFirewallRule:

New-NetFirewallRule -Name sshd -DisplayName „Serwer OpenSSH (sshd)” -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Domyślnie ważne komponenty OpenSSH są przechowywane w następujących katalogach:

  • Pliki wykonywalne serwera OpenSSH: C: \ Windows \ System32 \ OpenSSH \
  • Plik konfiguracyjny Sshd_config (utworzony po pierwszym uruchomieniu usługi): C: \ ProgramData \ ssh
  • Magazyn OpenSSH: C: \ windows \ system32 \ OpenSSH \ logs \ sshd.log
  • Plik kluczy autoryzowanych i klucze: % USERPROFILE% \. Ssh \

Podczas instalowania serwera OpenSSH w systemie tworzony jest nowy użytkownik lokalny sshd.

Sshd_config: Plik konfiguracyjny serwera OpenSSH

Możesz zmienić ustawienia serwera OpenSSH w pliku konfiguracyjnym% programdata% \ ssh \sshd_config.

Na przykład, aby zabronić połączenia SSH dla określonego użytkownika domeny (i wszystkich użytkowników określonej domeny), dodaj następujące dyrektywy na końcu pliku:

DenyUsers winitpro \ [email protected] DenyUsers corp \ *

Aby zezwolić na połączenie tylko dla określonej grupy domen:

AllowGroups winitpro \ sshadmins

Lub możesz zezwolić na dostęp dla grupy lokalnej:

AllowGroups sshadmins

Możliwe jest zabronienie logowania na kontach z uprawnieniami administratora, w tym przypadku, aby wykonać uprzywilejowane działania w sesji SSH, musisz wykonać runy.

Administratorzy Denygroups

Następujące dyrektywy zezwalają na dostęp SSH według klucza (dostęp do systemu Windows przez SSH według klucza zostanie szczegółowo omówiony w następnym artykule) i hasło:

PubkeyUwierzytelnienie tak HasłoUwierzytelnienie tak

Możesz zmienić port, na którym akceptuje połączenia OpenSSH w pliku konfiguracyjnym sshd_config w dyrektywie Port.

Po wszelkich zmianach w pliku konfiguracyjnym sshd_config musisz zrestartować usługi sshd:

restart-service sshd

Połącz się z Windows 10 przez SSH

Teraz możesz spróbować połączyć się z systemem Windows 10 za pośrednictwem klienta SSH (używam szpachli, ale mogę używać wbudowanego klienta ssh systemu Windows).

Przy pierwszym połączeniu pojawia się standardowe żądanie dodania hosta do listy znanych hostów SSH.

Kliknij przycisk Tak, a następnie w oknie, które zostanie otwarte, zaloguj się jako użytkownik systemu Windows.

Po udanym połączeniu z poleceniem zostanie uruchomiona powłoka polecenia cmd.exe.

admin @ win10tst C: \ Users \ admin>

W wierszu poleceń możesz wykonywać różne polecenia, uruchamiać skrypty i programy.

Wolę pracować w wierszu polecenia programu PowerShell. Aby uruchomić interpreter programu PowerShell, uruchom:

powershell.exe

Aby zmienić domyślną powłokę w OpenSSH z cmd.exe na PowerShell, wprowadź zmiany w rejestrze za pomocą tego polecenia:

New-ItemProperty -Path "HKLM: \ SOFTWARE \ OpenSSH" -Name DefaultShell -Value "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ powershell.exe" -PropertyType String -Force

Pozostaje zrestartować połączenie SSH i upewnić się, że podczas połączenia używana jest powłoka PowerShell (wskazuje na to zaproszenie PS C: \ Users \ admin>).

W sesji SSH uruchomiono konsolę PowerShell, w której działają zwykłe funkcje: autouzupełnianie, kolorowanie według modułu PSReadLine, historia poleceń itp. Jeśli bieżący użytkownik jest członkiem lokalnej grupy administratorów, wówczas wszystkie polecenia w jego sesji są wykonywane z podwyższonymi uprawnieniami, nawet gdy UAC jest włączony.