Číst v angličtině

Sdílet prostřednictvím


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-PSSessiona Invoke-Command rutiny Enter-PSSessionteď 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.exesshd.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

  1. 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
    
  2. 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.

  3. sshd_config Upravte soubor umístěný na $env:ProgramData\sshadrese .

    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 obvykle Progra~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.

  4. Restartujte službu sshd.

    Restart-Service sshd
    
  5. Přidejte cestu, do které je nainstalovaný OpenSSH, do proměnné prostředí Path. Například C:\Program Files\OpenSSH\. Tato položka umožňuje ssh.exe nalezení položky.

Instalace služby SSH na počítač s Ubuntu Linuxem

  1. Nainstalujte si nejnovější verzi PowerShellu, viz Instalace PowerShellu v Ubuntu.

  2. Nainstalujte Ubuntu OpenSSH Server.

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. 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.

  4. Restartujte službu SSH.

    sudo systemctl restart sshd.service
    

Instalace služby SSH na počítač s macOS

  1. 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:

    1. Otevře záznam typu System Settings.
    2. Klikněte na General
    3. Klikněte na Sharing.
    4. Zkontrolujte Remote Login , jestli chcete nastavit Remote Login: On.
    5. Povolte přístup příslušným uživatelům.
  2. 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
    
  3. 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 a Enter-PSHostProcess pracuje z jakékoli interaktivní vzdálené relace.

Viz také