Naučte se nastavit a používat PowerShell SSH remoting

Když řekl, že Microsoft PowerShell by se stal open source projekt, který běží na Windows, Linux a macOS v srpnu 2016, tam byl zajímavý vráskám související s PowerShell remoting.

Microsoft řekl, že toto jádro PowerShell bude podporovat remoting přes Secure Shell (SSH), stejně jako Web Services-Management (WS-MAN). Vždy můžete použít binární soubory SSH PowerShell, ale oznámení naznačilo, že podpora SSH bude nedílnou součástí PowerShell. Tím se otevřela možnost provádět vzdálenou správu systémů Windows a Linux snadno pomocí stejných technologií.

krátká historie PowerShell remoting

společnost Microsoft představila remoting ve verzi PowerShell 2.0 ve Windows 7 a Windows Server 2008 R2, což dramaticky změnilo krajinu pro správce systému Windows. Mohli vytvářet relace vzdálené plochy na servery, ale vzdálené ovládání PowerShell umožnilo spravovat velké množství serverů současně.

Remoting v prostředí Windows PowerShell je založen na ws-MAN, otevřeném standardu z distribuované pracovní skupiny pro správu. Ale protože remoting založený na WS-MAN je orientován na Windows, bylo nutné použít jinou technologii, obvykle SSH, pro správu systémů Linux.

Zavedení SSH na PowerShell Core

Jsme si zvykli na instalaci softwaru v systému Windows pomocí průvodců, ale instalace OpenSSH vyžaduje další informace o pozadí a další práce od správce.

SSH je protokol pro správu systémů přes možná nezabezpečenou síť. SSH pracuje v režimu klient-server a je de facto standardem pro vzdálenou správu v prostředích Linuxu.

PowerShell Core používá OpenSSH, vidličku z SSH 1.2.12, která byla vydána pod licencí open source. OpenSSH je pravděpodobně nejoblíbenější implementace SSH.

kód potřebný k použití ws-MAN remoting je nainstalován jako součást operačního systému Windows. Musíte nainstalovat OpenSSH ručně.

instalace OpenSSH

zvykli jsme si instalovat software na Windows pomocí průvodců, ale instalace OpenSSH vyžaduje více informací o pozadí a více práce od správce. Bez nějakého ručního zásahu může vzniknout mnoho problémů.

proces instalace OpenSSH v systému Windows se postupem času zlepšil, ale stále to není tak snadné, jak by mělo být. Práce s konfiguračním souborem je velmi žádoucí.

při instalaci PowerShell SSH existují dvě možnosti:

  1. v systémech Windows 10 1809, Windows Server 1809, Windows Server 2019 a novějších je OpenSSH k dispozici jako volitelná funkce.
  2. v dřívějších verzích systému Windows si můžete stáhnout a nainstalovat OpenSSH z GitHubu.

ujistěte se, že váš systém má nejnovější opravy před instalací OpenSSH.

instalace volitelné funkce OpenSSH

volitelnou funkci OpenSSH můžete nainstalovat pomocí PowerShell. Nejprve zkontrolujte systém pomocí následujícího příkazu:

Get-WindowsCapability -Online | where Name -like '*SSH*'
OpenSSH komponenty
Obrázek 1. Najděte komponenty OpenSSH ve vašem systému.

Obrázek 1 ukazuje, že klientský software OpenSSH je předinstalován.

Budete muset použít Windows PowerShell pro instalaci, pokud si stáhnete WindowsCompatibility PowerShell modul pro Jádro. Poté můžete importovat Modul Servis a správa obrazu nasazení z prostředí Windows PowerShell a spustit příkazy v jádru PowerShell.

nainstalujte funkci serveru:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Path :
Online : True
RestartNeeded : False

soubory SSH se instalují v C:\Windows\System32\OpenSSH složka.

stáhnout OpenSSH z GitHubu

začněte stažením nejnovější verze z GitHubu. Nejnovější verze pokynů k instalaci je na tomto odkazu.

po dokončení stahování rozbalte soubor zip do C:\Program Files \ OpenSSH složka. Změnit umístění na C:\Program Files\OpenSSH pro instalaci Služeb SSH:

.\install-sshd.ps1
SetServiceObjectSecurity SUCCESS
ChangeServiceConfig2 SUCCESS
ChangeServiceConfig2 SUCCESS

konfigurace OpenSSH

po instalaci OpenSSH proveďte některé další konfigurační kroky.

ujistěte se, že OpenSSH složka je zahrnuta v systému proměnné prostředí path:

  • C:\Windows\System32\OpenSSH\ pokud je nainstalován jako Windows volitelná funkce
  • C:\Program Files\Program\ pokud je nainstalován přes OpenSSH ke stažení

Nastavte dvě služby spustit automaticky:

Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

Pokud jste nainstalovali OpenSSH s volitelnou funkcí, vytvoří systém Windows nové pravidlo brány firewall, které umožní příchozí přístup SSH přes port 22. Pokud máte nainstalován OpenSSH z ke stažení, pak vytvořit pravidlo brány firewall pomocí tohoto příkazu:

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

Spustit sshd službu generovat SSH klíče:

Start-Service sshd

SSH klíče a konfigurační soubor jsou umístěny v C:\ProgramData\ssh, která je skrytá složka. Výchozí shell používaný SSH je příkazový shell systému Windows. To se musí změnit na PowerShell:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Program Files\PowerShell\6\pwsh.exe" -PropertyType String -Force

Nyní, když jste se připojit k systému přes SSH, PowerShell Core začne a bude výchozí shell. V případě potřeby můžete také vytvořit výchozí prostředí Windows PowerShell.

v systému Windows je chyba v OpenSSH. Nefunguje s cestami s mezerou,jako je cesta k spustitelnému souboru jádra PowerShell! Řešením je vytvořit symbolický odkaz, který vytvoří cestu, která OpenSSH lze použít:

New-Item -ItemType SymbolicLink -Path C:\pwsh -Target 'C:\Program Files\PowerShell\6'

V souboru sshd_config, un-komentář následující řádky:

PubkeyAuthentication yes
PasswordAuthentication yes

Přidat tento řádek před další subsystém linky:

Subsystem powershell C:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile

to říká OpenSSH spustit PowerShell jádro.

Komentář mimo řádek:

AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Po uložení změny v souboru sshd_config, restartujte služby:

Restart-Service sshd
Start-Service ssh-agent

Budete muset restartovat sshd služby po jakékoliv změně konfiguračního souboru.

použití PowerShell SSH remoting

použití remotingu přes SSH je velmi podobné remotingu přes WS-MAN. Ke vzdálenému systému můžete přistupovat přímo pomocí příkazu Invoke-Command:

Invoke-Command -HostName W19DC01 -ScriptBlock {Get-Process}
richard@MANTICORE@w19dc01's password:

zobrazí se výzva k zadání hesla, které se při psaní nezobrazí.

Pokud jste se poprvé připojili ke vzdálenému systému přes SSH, zobrazí se podobná zpráva:

The authenticity of host 'servername (10.00.00.001)' can't be established.
ECDSA key fingerprint is SHA256:(<a large string>).
Are you sure you want to continue connecting (yes/no)?

zadejte Ano a stiskněte klávesu Enter.

můžete vytvořit remoting zasedání:

$sshs = New-PSSession -HostName W19FS01
richard@MANTICORE@w19fs01's password:

A pak jej použít:

Invoke-Command -Session $sshs -ScriptBlock {$env:COMPUTERNAME}
W19FS01

můžete zadat OpenSSH vzdálené relace pomocí Enter-PSSession stejným způsobem jako WS-MAN zasedání. Můžete zadat existující relaci nebo použít parametr HostName na Enter-PSSession k vytvoření interaktivní relace.

nemůžete odpojit relaci založenou na SSH; to je technika WS-MAN.

můžete použít relace WS-MAN a SSH pro správu více počítačů, jak je znázorněno na obrázku 2.

informace o relaci ukazuje různé dopravní mechanismus — WS-MAN a SSH, respektive-a koncový bod v provozu o každém zasedání.

relace vzdálené správy
Obrázek 2. Pro správu vzdálených počítačů použijte relace WS-MAN a SSH společně.

Pokud se podíváte pozorně na Obrázek 2, všimněte si, tam byl žádný prompt pro heslo na SSH relaci, protože systém byl nastaven s SSH klíče ověřování.

pomocí ověřování pomocí SSH klíčů

otevřete zvýšenou relaci PowerShell. Změňte umístění na .ssh složku v uživatelské oblasti:

Set-Location -Path ~\.ssh

Vygenerovat dvojici klíčů:

ssh-keygen -t ed25519

Přidat soubor klíče do SSH-agenta na lokálním počítači:

ssh-add id_ed25519

jakmile přidáte soukromý klíč do SSh-agenta, zálohujte soukromý klíč na bezpečné místo a odstraňte klíč z místního počítače.

zkopírujte id_ed25519.soubor pub do .složka ssh pro odpovídající uživatelský účet na vzdáleném serveru. Můžete vytvořit takový účet, pokud je to nutné:

$pwd = Read-Host -Prompt 'Password' -AsSecureString
Password: ********
New-LocalUser -Name Richard -Password $pwd -PasswordNeverExpires
Add-LocalGroupMember -Group Administrators -Member Richard

Na vzdáleném počítači, zkopírujte obsah souboru klíče do souboru authorized_keys:

scp id_ed25519.pub authorized_keys

authorized_keys soubor potřebuje jeho oprávnění změnit:

  • Otevřete Průzkumník souborů, klikněte pravým tlačítkem na authorized_keys a přejděte na Vlastnosti-zabezpečení-pokročilé
  • klikněte na Zakázat dědičnost.
  • vyberte Převést zděděná oprávnění na explicitní oprávnění k tomuto objektu.
  • odeberte všechna oprávnění kromě systému a uživatelského účtu. Oba by měli mít plnou kontrolu.
Úvod do SSH s jádrem PowerShell.

uvidíte odkazy na použití OpenSSHUtils modul nastavit oprávnění, ale tam je chyba ve verzi od PowerShell Galerie, která dělá authorized_keys soubor nepoužitelný.

restartujte službu sshd na vzdáleném počítači.

nyní se můžete připojit ke vzdálenému počítači bez použití hesla, jak je znázorněno na obrázku 2.

Pokud se připojujete k počítači, který není doménou, ze stroje v doméně, musíte použít parametr uživatelské jméno po povolení ověřování párů klíčů:

$ss = New-PSSession -HostName W19ND01 -UserName Richard

uživatelské jméno na vzdáleném počítači potřebujete, aby odpovídalo vašemu uživatelskému jménu domény. Nebudete vyzváni k zadání hesla.

ws-MAN nebo SSH remoting?

měli byste použít remoting založený na WS-MAN nebo SSH? Ws-MAN remoting je k dispozici na všech systémech Windows a je ve výchozím nastavení povolen na Windows Server 2012 a novějších verzích serveru. Ws-MAN remoting má některé problémy, zejména problém double hop. WS-MAN také potřebuje práci navíc pro vzdálené systémy bez domény.

SSH remoting je k dispozici pouze v PowerShell Core; Windows PowerShell je omezen na ws-MAN remoting. Instalace a konfigurace SSH remoting vyžaduje značné množství práce. Dokumentace není tak dobrá, jak by měla být. Výhodou SSH remoting je, že můžete snadno přistupovat k počítačům bez domény a systémům bez systému Windows, kde je SSH standardem pro vzdálený přístup.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.