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
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:
- v systémech Windows 10 1809, Windows Server 1809, Windows Server 2019 a novějších je OpenSSH k dispozici jako volitelná funkce.
- 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*'
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í.
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.
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.