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é