Sdílet prostřednictvím


Vzdálené připojení PowerShellu přes SSH

Přehled

Vzdálená relace PowerShellu běžně 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í vzdálenou správu 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 Administration (JEA).

Vzdálený přístup pomocí SSH umožňuje provádět základní relace PowerShellu mezi počítači s Windows a Linuxem. Vzdálené připojení SSH vytvoří na cílovém počítači proces hostitele PowerShellu jako součást subsystému SSH. Nakonec implementujeme obecný model hostování, podobně jako WinRM, abychom podporovali konfiguraci koncových bodů a JEA.

Rutiny New-PSSession, Enter-PSSession a Invoke-Command 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 poskytnete uživatelské jméno parametrem UserName. 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 mohli využít funkce SSH pro vzdálenou správu, musíte také nainstalovat PowerShell z GitHubu. 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 sad parametrů New-PSSession můžete ověřit, že PowerShell podporuje vzdálenou správu 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
      

      Poznámka:

      V OpenSSH pro Windows došlo k chybě, která vám brání v použití cesty s mezerami pro spustitelný soubor subsystému. Tento problém můžete vyřešit dvěma způsoby:

      • Pro cestu ke spustitelnému souboru PowerShellu použijte krátký název ve stylu Windows 8.3.
      • Vytvoření symbolického odkazu na spustitelný soubor PowerShellu, který vede k cestě bez mezer

      Další informace najdete v tématu problém č. 784 v úložišti PowerShell/Win32-OpenSSH.

      Název stylu 8.3 potřebujete získat pouze pro segment cesty, která obsahuje mezeru. Ve výchozím nastavení je v C:\Program Files\PowerShell\7\prostředí PowerShell 7 nainstalován . Název Program Files stylu 8.3 by měl být progra~1. Název můžete ověřit pomocí následujícího příkazu:

      Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' |
          Select-Object EightDotThreeFileName
      

      Název 8.3 je starší funkce systému souborů NTFS, která se dá zakázat. Tato funkce musí být povolená pro svazek, na kterém je nainstalovaný PowerShell.

      Případně můžete vytvořit symbolický odkaz na spustitelný soubor PowerShellu, který vede k cestě bez mezer. Tato metoda je upřednostňovaná, protože umožňuje aktualizovat odkaz, pokud se cesta ke spustitelnému souboru PowerShellu někdy změní, aniž byste museli aktualizovat sshd_config soubor.

      Pomocí následujícího příkazu vytvořte symbolický odkaz na spustitelný soubor:

      $newItemSplat = @{
           ItemType = 'SymbolicLink'
           Path = 'C:\ProgramData\ssh\'
           Name = 'pwsh.exe'
           Value = (Get-Command pwsh.exe).Source
      }
      New-Item @newItemSplat
      

      Tento příkaz vytvoří symbolický odkaz ve stejném adresáři, který používá server OpenSSH k uložení klíčů hostitele a další konfigurace.

    • 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. Upravte soubor sshd_config 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.

  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 povolena vzdálená komunikace SSH:

    1. Otevřít System Settings.
    2. Klikněte na General
    3. Klikněte na Sharing.
    4. Zkontrolujte Remote Login, abyste nastavili Remote Login: On.
    5. Povolte přístup příslušným uživatelům.
  2. Upravte soubor sshd_config 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.

    • 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.

Autentizace

Vzdálená komunikace PowerShellu přes SSH závisí na výměně ověřovacích informací mezi klientem SSH a službou SSH a sama neimplementuje žádné ověřovací mechanismy. 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 pro vzdálený přístup pomocí PowerShellu, prostudujte si dokumentaci k SSH, jak správně nakonfigurovat vícefaktorové ověřování a ověřte, že funguje mimo PowerShell.

Poznámka:

Uživatelé si zachovávají stejná oprávnění ve vzdálených relacích. To znamená, že správci mají přístup k prostředí se zvýšenými oprávněními a normální uživatelé ne.

Příklad vzdálené správy PowerShellu

Nejjednodušší způsob, jak otestovat vzdálenou práci, je vyzkoušet ji 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ý přístup funguje. Poté se mezi počítači připojte vzdáleně a změňte název hostitele.

Linux na Linux

$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 na 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. Během relace můžete profil načíst tak, že použijete dot sourcing profilu pomocí úplné cesty k souboru. To nesouvisí s profily SSH. SSH server můžete nakonfigurovat tak, aby používal PowerShell jako výchozí prostředí a načítal profil pomocí SSH. Další informace najdete v dokumentaci SSH.

  • Před PowerShellem 7.1 nepodporovala vzdálená komunikace přes SSH druhé přenosy ve vzdálených relacích. Tato schopnost byla omezená na relace používající WinRM. PowerShell 7.1 umožňuje Enter-PSSession a Enter-PSHostProcess pracovat v rámci jakékoli interaktivní vzdálené relace.

Viz také