Vzdálená komunikace PowerShellu přes SSH
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.
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.
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.
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
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.
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.
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.
$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
Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]
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>
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.
Zpětná vazba k produktu PowerShell
PowerShell je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: