Vzdálená komunikace PowerShellu přes SSH
Přehled
Vzdálené komunikace PowerShellu obvykle používá WinRM pro vyjednávání připojení a přenos dat. SSH je nyní k dispozici pro platformy Linux a Windows a umožňuje skutečnou multiplatformní komunikace PowerShellu.
WinRM poskytuje robustní model hostování pro vzdálené relace PowerShellu. Vzdálená komunikace založená na SSH v současné době nepodporuje konfiguraci vzdáleného koncového bodu a just Enough Správa istration (JEA).
Vzdálené komunikace SSH umožňuje provádět základní vzdálené komunikace relace PowerShellu mezi počítači s Windows a Linuxem. Vzdálené komunikace SSH vytvoří na cílovém počítači hostitelský proces PowerShellu jako subsystém SSH. Nakonec implementujeme obecný model hostování, podobně jako WinRM, abychom podporovali konfiguraci koncových bodů a JEA.
Rutiny New-PSSession
a Invoke-Command
rutiny Enter-PSSession
teď mají novou sadu parametrů pro podporu tohoto nového připojení vzdálené komunikace.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Pokud chcete vytvořit vzdálenou relaci, zadáte cílový počítač s parametrem HostName a zadáte uživatelské jméno s uživatelským jménem. Při interaktivním spouštění rutin se zobrazí výzva k zadání hesla. Ověřování pomocí klíče SSH můžete použít také pomocí souboru privátního klíče s parametrem KeyFilePath . Vytváření klíčů pro ověřování SSH se liší podle platformy.
Obecné informace o nastavení
PowerShell 6 nebo vyšší a SSH musí být nainstalované na všech počítačích. Nainstalujte klienta SSH () i server (ssh.exe
sshd.exe
), abyste mohli vzdáleně přistupovat k počítačům a z počítačů. OpenSSH pro Windows je teď k dispozici ve Windows 10 buildu 1809 a Windows Serveru 2019. Další informace najdete v tématu Správa Windows pomocí OpenSSH. V případě Linuxu nainstalujte SSH, včetně serveru sshd, který je vhodný pro vaši platformu. Abyste získali funkci vzdálené komunikace SSH, musíte také z GitHubu nainstalovat PowerShell.
Server SSH musí být nakonfigurovaný tak, aby vytvořil subsystém SSH pro hostování procesu PowerShellu na vzdáleném počítači. A musíte povolit ověřování pomocí hesla nebo klíče.
Instalace služby SSH na počítač s Windows
Nainstalujte nejnovější verzi PowerShellu. Další informace najdete v tématu Instalace PowerShellu ve Windows.
Výpisem
New-PSSession
sad parametrů můžete ověřit, že PowerShell podporuje vzdálené komunikace SSH. Všimněte si, že existují názvy sad parametrů, které začínají SSH. Tyto sady parametrů zahrnují parametry SSH .(Get-Command New-PSSession).ParameterSets.Name
Name ---- SSHHost SSHHostHashParam
Nainstalujte nejnovější OpenSSH win32. Pokyny k instalaci najdete v tématu Začínáme s OpenSSH.
Poznámka:
Pokud chcete nastavit PowerShell jako výchozí prostředí pro OpenSSH, přečtěte si téma Konfigurace Windows pro OpenSSH.
sshd_config
Upravte soubor umístěný na$env:ProgramData\ssh
adrese .Ujistěte se, že je povolené ověřování heslem:
PasswordAuthentication yes
Vytvořte subsystém SSH, který hostuje proces PowerShellu na vzdáleném počítači:
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -nologo
Poznámka:
Počínaje PowerShellem 7.4 už při spuštění PowerShellu
-nologo
v režimu serveru SSH nemusíte parametr používat.Poznámka:
Výchozí umístění spustitelného souboru PowerShellu je
c:/progra~1/powershell/7/pwsh.exe
. Umístění se může lišit v závislosti na tom, jak jste nainstalovali PowerShell.Pro všechny cesty k souborům, které obsahují mezery, musíte použít krátký název 8.3. V OpenSSH pro Windows došlo k chybě, která brání mezerám v práci se spustitelnými cestami subsystému. Další informace najdete u tohoto problému na GitHubu.
Krátký název
Program Files
složky ve Windows 8.3 je obvykleProgra~1
. Pomocí následujícího příkazu se ale můžete ujistit:Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileName
EightDotThreeFileName --------------------- c:\progra~1
Volitelně můžete povolit ověřování pomocí klíče:
PubkeyAuthentication yes
Další informace najdete v tématu Správa klíčů OpenSSH.
Restartujte službu sshd.
Restart-Service sshd
Přidejte cestu, do které je nainstalovaný OpenSSH, do proměnné prostředí Path. Například
C:\Program Files\OpenSSH\
. Tato položka umožňujessh.exe
nalezení položky.
Instalace služby SSH na počítač s Ubuntu Linuxem
Nainstalujte si nejnovější verzi PowerShellu, viz Instalace PowerShellu v Ubuntu.
Nainstalujte Ubuntu OpenSSH Server.
sudo apt install openssh-client sudo apt install openssh-server
sshd_config
Upravte soubor v umístění/etc/ssh
.Ujistěte se, že je povolené ověřování heslem:
PasswordAuthentication yes
Volitelně můžete povolit ověřování pomocí klíče:
PubkeyAuthentication yes
Další informace o vytváření klíčů SSH na Ubuntu najdete v manpage pro ssh-keygen.
Přidejte položku subsystému PowerShellu:
Subsystem powershell /usr/bin/pwsh -sshs -nologo
Poznámka:
Výchozí umístění spustitelného souboru PowerShellu je
/usr/bin/pwsh
. Umístění se může lišit v závislosti na tom, jak jste nainstalovali PowerShell.Poznámka:
Počínaje PowerShellem 7.4 už při spuštění PowerShellu
-nologo
v režimu serveru SSH nemusíte parametr používat.Restartujte službu SSH.
sudo systemctl restart sshd.service
Instalace služby SSH na počítač s macOS
Nainstalujte nejnovější verzi PowerShellu. Další informace najdete v instalaci PowerShellu v systému macOS.
Pomocí následujícího postupu se ujistěte, že je povolená komunikace SSH:
- Otevře záznam typu
System Settings
. - Klikněte na
General
- Klikněte na
Sharing
. - Zkontrolujte
Remote Login
, jestli chcete nastavitRemote Login: On
. - Povolte přístup příslušným uživatelům.
- Otevře záznam typu
sshd_config
Upravte soubor v umístění/private/etc/ssh/sshd_config
.Použijte textový editor, jako je nano:
sudo nano /private/etc/ssh/sshd_config
Ujistěte se, že je povolené ověřování heslem:
PasswordAuthentication yes
Přidejte položku subsystému PowerShellu:
Subsystem powershell /usr/local/bin/pwsh -sshs -nologo
Poznámka:
Výchozí umístění spustitelného souboru PowerShellu je
/usr/local/bin/pwsh
. Umístění se může lišit v závislosti na tom, jak jste nainstalovali PowerShell.Poznámka:
Počínaje PowerShellem 7.4 už při spuštění PowerShellu
-nologo
v režimu serveru SSH nemusíte parametr používat.Volitelně můžete povolit ověřování pomocí klíče:
PubkeyAuthentication yes
Restartujte službu sshd.
sudo launchctl stop com.openssh.sshd sudo launchctl start com.openssh.sshd
Poznámka:
Při upgradu operačního systému může být konfigurační soubor SSH přepsán. Po upgradu zkontrolujte konfigurační soubor.
Ověřování
Vzdálené komunikace PowerShellu přes SSH závisí na výměně ověřování mezi klientem SSH a službou SSH a neimplementuje žádná schémata ověřování sama. Výsledkem je, že všechna nakonfigurovaná schémata ověřování, včetně vícefaktorového ověřování, zpracovává SSH a nezávislá na PowerShellu. Můžete například nakonfigurovat službu SSH tak, aby vyžadovala ověření veřejného klíče a jednorázové heslo pro přidání zabezpečení. Konfigurace vícefaktorového ověřování je mimo rozsah této dokumentace. Než se ho pokusíte použít se vzdálené komunikace PowerShellu, přečtěte si dokumentaci k SSH, jak správně nakonfigurovat vícefaktorové ověřování a ověřit, jestli funguje mimo PowerShell.
Poznámka:
Uživatelé zachovají stejná oprávnění ve vzdálených relacích. To znamená, že Správa istrátory mají přístup k prostředí se zvýšenými oprávněními a normální uživatelé ne.
Příklad vzdálené komunikace PowerShellu
Nejjednodušší způsob, jak otestovat vzdálené komunikace, je vyzkoušet ho na jednom počítači. V tomto příkladu vytvoříme vzdálenou relaci zpět do stejného počítače s Linuxem. Používáme rutiny PowerShellu interaktivně, takže se zobrazí výzvy od SSH s žádostí o ověření hostitelského počítače a zobrazení výzvy k zadání hesla. Totéž můžete udělat na počítači s Windows, abyste měli jistotu, že vzdálené komunikace funguje. Potom mezi počítači vzdáleně změňte název hostitele.
Linux do Linuxu
$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' can't be established.
ECDSA key fingerprint is SHA256:2kCbnhT2dUE6WCGgVJ8Hyfu1z2wE4lifaJXLO7QJy0Y.
Are you sure you want to continue connecting (yes/no)?
TestUser@UbuntuVM1s password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 UbuntuVM1 RemoteMachine Opened DefaultShell Available
Enter-PSSession $session
[UbuntuVM1]: PS /home/TestUser> uname -a
Linux TestUser-UbuntuVM1 4.2.0-42-generic 49~16.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[UbuntuVM1]: PS /home/TestUser> Exit-PSSession
Invoke-Command $session -ScriptBlock { Get-Process pwsh }
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName PSComputerName
------- ------ ----- ----- ------ -- -- ----------- --------------
0 0 0 19 3.23 10635 635 pwsh UbuntuVM1
0 0 0 21 4.92 11033 017 pwsh UbuntuVM1
0 0 0 20 3.07 11076 076 pwsh UbuntuVM1
Linux do Windows
Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]
Windows do Windows
C:\Users\PSUser\Documents>pwsh.exe
PowerShell
Copyright (c) Microsoft Corporation. All rights reserved.
$session = New-PSSession -HostName WinVM2 -UserName PSRemoteUser
The authenticity of host 'WinVM2 (10.13.37.3)' can't be established.
ECDSA key fingerprint is SHA256:kSU6slAROyQVMEynVIXAdxSiZpwDBigpAF/TXjjWjmw.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added 'WinVM2,10.13.37.3' (ECDSA) to the list of known hosts.
PSRemoteUser@WinVM2's password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 WinVM2 RemoteMachine Opened DefaultShell Available
Enter-PSSession -Session $session
[WinVM2]: PS C:\Users\PSRemoteUser\Documents> $PSVersionTable
Name Value
---- -----
PSEdition Core
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
SerializationVersion 1.1.0.1
BuildVersion 3.0.0.0
CLRVersion
PSVersion 6.0.0-alpha
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
GitCommitId v6.0.0-alpha.17
[WinVM2]: PS C:\Users\PSRemoteUser\Documents>
Omezení
Příkaz sudo nefunguje ve vzdálené relaci s počítačem s Linuxem.
PsRemoting přes SSH nepodporuje profily a nemá přístup k
$PROFILE
. Po dokončení relace můžete profil načíst tak, že dot sourcing profil načte pomocí úplného cesty k souboru. To nesouvisí s profily SSH. Server SSH můžete nakonfigurovat tak, aby jako výchozí prostředí používal PowerShell a načetl profil přes SSH. Další informace najdete v dokumentaci SSH.Před PowerShellem 7.1 vzdálená komunikace přes SSH nepodporuje vzdálené relace druhého směrování. Tato funkce byla omezená na relace používající WinRM. PowerShell 7.1 umožňuje
Enter-PSSession
aEnter-PSHostProcess
pracuje z jakékoli interaktivní vzdálené relace.