PowerShell távoli eljáráshívás SSH-n keresztülPowerShell remoting over SSH

ÁttekintésOverview

A PowerShell távelérés általában a WinRM szolgáltatást használja a kapcsolatok egyeztetéséhez és az adatátvitelhez.PowerShell remoting normally uses WinRM for connection negotiation and data transport. Az SSH mostantól elérhető Linux és Windows platformokon, és lehetővé teszi a valódi többplatformos PowerShell-távelérést.SSH is now available for Linux and Windows platforms and allows true multiplatform PowerShell remoting.

A WinRM robusztus üzemeltetési modellt biztosít a PowerShell távoli munkameneteihez.WinRM provides a robust hosting model for PowerShell remote sessions. Az SSH-alapú távelérés jelenleg nem támogatja a távoli végpontok konfigurálását és elég adminisztrációt (JEA).SSH-based remoting doesn't currently support remote endpoint configuration and Just Enough Administration (JEA).

Az SSH távoli eljáráshívás lehetővé teszi a Windows és Linux rendszerű számítógépek közötti alapszintű PowerShell-munkamenetek elvégzését.SSH remoting lets you do basic PowerShell session remoting between Windows and Linux computers. Az SSH távelérés egy PowerShell-gazdagépet hoz létre a célszámítógépen SSH alrendszerként.SSH remoting creates a PowerShell host process on the target computer as an SSH subsystem. Végül a WinRM-hez hasonló általános üzemeltetési modellt fogunk megvalósítani a végpont-konfiguráció és a JEA támogatásához.Eventually we'll implement a general hosting model, similar to WinRM, to support endpoint configuration and JEA.

A New-PSSession , a Enter-PSSession és a Invoke-Command parancsmagok mostantól új paraméterrel rendelkeznek az új távelérési kapcsolatok támogatásához.The New-PSSession, Enter-PSSession, and Invoke-Command cmdlets now have a new parameter set to support this new remoting connection.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Távoli munkamenet létrehozásához adja meg a célszámítógépet a hostname paraméterrel, és adja meg a felhasználónevet a felhasználónévvel.To create a remote session, you specify the target computer with the HostName parameter and provide the user name with UserName. A parancsmagok interaktív futtatásakor a rendszer jelszót kér.When running the cmdlets interactively, you're prompted for a password. Az SSH-kulcsos hitelesítést egy titkos kulcsfájl használatával is használhatja a KeyFilePath paraméterrel.You can also use SSH key authentication using a private key file with the KeyFilePath parameter. Az SSH-hitelesítés kulcsai a platformtól függően változnak.Creating keys for SSH authentication varies by platform.

Általános telepítési információkGeneral setup information

A PowerShell 6-os vagy újabb verzióját, az SSH-t pedig az összes számítógépre telepíteni kell.PowerShell 6 or higher, and SSH must be installed on all computers. Telepítse az SSH-ügyfelet ( ssh.exe ) és a kiszolgálót ( sshd.exe ) is, hogy a számítógépekről és a számítógépről is távoli legyen.Install both the SSH client (ssh.exe) and server (sshd.exe) so that you can remote to and from the computers. A Windowshoz készült OpenSSH mostantól elérhető a Windows 10 Build 1809 és a Windows Server 2019 rendszerben.OpenSSH for Windows is now available in Windows 10 build 1809 and Windows Server 2019. További információ: a Windows kezelése az OpenSSH-val.For more information, see Manage Windows with OpenSSH. Linux esetén telepítse az SSH-t, beleértve az sshd-kiszolgálót, amely a platform számára megfelelő.For Linux, install SSH, including sshd server, that's appropriate for your platform. Emellett a PowerShellt is telepítenie kell a GitHubról az SSH távelérési szolgáltatás beszerzéséhez.You also need to install PowerShell from GitHub to get the SSH remoting feature. Az SSH-kiszolgálót úgy kell konfigurálni, hogy hozzon létre egy SSH-alrendszert a PowerShell-folyamat futtatásához a távoli számítógépen.The SSH server must be configured to create an SSH subsystem to host a PowerShell process on the remote computer. Továbbá engedélyeznie kell a jelszót vagy a kulcs-alapú hitelesítést.And, you must enable password or key-based authentication.

Beállítás Windows rendszerű számítógépenSet up on a Windows computer

  1. Telepítse a PowerShell legújabb verzióját.Install the latest version of PowerShell. További információ: a PowerShell Core telepítése Windowsrendszeren.For more information, see Installing PowerShell Core on Windows.

    Megerősítheti, hogy a PowerShell rendelkezik SSH távelérési támogatással a paraméter-készletek listázásával New-PSSession .You can confirm that PowerShell has SSH remoting support by listing the New-PSSession parameter sets. Figyelje meg, hogy vannak-e olyan paraméterek, amelyek az SSH-val kezdődnek.You'll notice there are parameter set names that begin with SSH. Ezek a paraméter-készletek SSH -paramétereket tartalmaznak.Those parameter sets include SSH parameters.

    (Get-Command New-PSSession).ParameterSets.Name
    
    Name
    ----
    SSHHost
    SSHHostHashParam
    
  2. Telepítse a legújabb Win32 OpenSSH-t.Install the latest Win32 OpenSSH. A telepítési utasításokért lásd: Bevezetés az OpenSSHhasználatába.For installation instructions, see Getting started with OpenSSH.

    Megjegyzés

    Ha az OpenSSH alapértelmezett rendszerhéjként szeretné beállítani a PowerShellt, tekintse meg a Windows konfigurálása az OpenSSH-hoz című témakört.If you want to set PowerShell as the default shell for OpenSSH, see Configuring Windows for OpenSSH.

  3. Szerkessze a sshd_config következő helyen található fájlt: $env:ProgramData\ssh .Edit the sshd_config file located at $env:ProgramData\ssh.

    Győződjön meg arról, hogy engedélyezve van a jelszó-hitelesítés:Make sure password authentication is enabled:

    PasswordAuthentication yes
    

    Hozzon létre egy PowerShell-folyamatot futtató SSH-alrendszert a távoli számítógépen:Create the SSH subsystem that hosts a PowerShell process on the remote computer:

    Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
    

    Megjegyzés

    A PowerShell-végrehajtható fájl alapértelmezett helye: c:/progra~1/powershell/7/pwsh.exe .The default location of the PowerShell executable is c:/progra~1/powershell/7/pwsh.exe. A hely a PowerShell telepítésének módjától függően változhat.The location can vary depending on how you installed PowerShell.

    A szóközöket tartalmazó fájlok elérési útjaihoz a 8,3 rövid nevet kell használnia.You must use the 8.3 short name for any file paths that contain spaces. Hiba történt a Windows rendszerhez készült OpenSSH-ban, amely megakadályozza, hogy a szóközök működnek az alrendszer végrehajtható fájljainak elérési útjain.There's a bug in OpenSSH for Windows that prevents spaces from working in subsystem executable paths. További információkért tekintse meg ezt a GitHub-problémát.For more information, see this GitHub issue.

    A Windows-mappa 8,3 rövid neve általában a következő Program Files : Progra~1 .The 8.3 short name for the Program Files folder in Windows is usually Progra~1. A következő paranccsal azonban meggyőződhet arról, hogy:However, you can use the following command to make sure:

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

    Szükség esetén engedélyezheti a kulcsos hitelesítést:Optionally, enable key authentication:

    PubkeyAuthentication yes
    

    További információ: az OpenSSH-kulcsok kezelése.For more information, see Managing OpenSSH Keys.

  4. Indítsa újra az sshd szolgáltatást.Restart the sshd service.

    Restart-Service sshd
    
  5. Adja meg az elérési utat, ahol az OpenSSH telepítve van a PATH környezeti változóba.Add the path where OpenSSH is installed to your Path environment variable. Például: C:\Program Files\OpenSSH\.For example, C:\Program Files\OpenSSH\. Ez a bejegyzés lehetővé teszi, ssh.exe hogy a megtalálhatók legyenek.This entry allows for the ssh.exe to be found.

Beállítás Ubuntu 16,04 Linux rendszerű számítógépenSet up on an Ubuntu 16.04 Linux computer

  1. Telepítse a PowerShell legújabb verzióját: a PowerShell Core telepítése Linux rendszeren.Install the latest version of PowerShell, see Installing PowerShell Core on Linux.

  2. Telepítse az Ubuntu OpenSSH-kiszolgálót.Install Ubuntu OpenSSH Server.

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. Szerkessze a sshd_config fájlt a helyen /etc/ssh .Edit the sshd_config file at location /etc/ssh.

    Győződjön meg arról, hogy engedélyezve van a jelszó-hitelesítés:Make sure password authentication is enabled:

    PasswordAuthentication yes
    

    Szükség esetén engedélyezheti a kulcsos hitelesítést:Optionally, enable key authentication:

    PubkeyAuthentication yes
    

    Az SSH-kulcsok Ubuntun való létrehozásával kapcsolatos további információkért tekintse meg az ssh-keygenManpage.For more information about creating SSH keys on Ubuntu, see the manpage for ssh-keygen.

    Adja hozzá a PowerShell alrendszer bejegyzését:Add a PowerShell subsystem entry:

    Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
    

    Megjegyzés

    A PowerShell-végrehajtható fájl alapértelmezett helye: /usr/bin/pwsh .The default location of the PowerShell executable is /usr/bin/pwsh. A hely a PowerShell telepítésének módjától függően változhat.The location can vary depending on how you installed PowerShell.

    Szükség esetén engedélyezheti a kulcsos hitelesítést:Optionally, enable key authentication:

    PubkeyAuthentication yes
    
  4. Indítsa újra az SSH -szolgáltatást.Restart the ssh service.

    sudo service ssh restart
    

Beállítás macOS rendszerű számítógépenSet up on a macOS computer

  1. Telepítse a PowerShell legújabb verzióját.Install the latest version of PowerShell. További információ: a PowerShell Core telepítése MacOS rendszeren.For more information, Installing PowerShell Core on macOS.

    Győződjön meg arról, hogy az SSH távelérés engedélyezve van a következő lépések végrehajtásával:Make sure SSH Remoting is enabled by following these steps:

    1. Nyissa meg a következő fájlt: System Preferences.Open System Preferences.
    2. Kattintson a Sharing lehetőségre.Click on Sharing.
    3. Remote LoginA beállításhoz keresse meg a következőt: Remote Login: On .Check Remote Login to set Remote Login: On.
    4. Hozzáférés engedélyezése a megfelelő felhasználók számára.Allow access to the appropriate users.
  2. Szerkessze a sshd_config fájlt a helyen /private/etc/ssh/sshd_config .Edit the sshd_config file at location /private/etc/ssh/sshd_config.

    Használjon szövegszerkesztőt, például Nano:Use a text editor such as nano:

    sudo nano /private/etc/ssh/sshd_config
    

    Győződjön meg arról, hogy engedélyezve van a jelszó-hitelesítés:Make sure password authentication is enabled:

    PasswordAuthentication yes
    

    Adja hozzá a PowerShell alrendszer bejegyzését:Add a PowerShell subsystem entry:

    Subsystem powershell /usr/local/bin/pwsh -sshs -NoLogo
    

    Megjegyzés

    A PowerShell-végrehajtható fájl alapértelmezett helye: /usr/local/bin/pwsh .The default location of the PowerShell executable is /usr/local/bin/pwsh. A hely a PowerShell telepítésének módjától függően változhat.The location can vary depending on how you installed PowerShell.

    Szükség esetén engedélyezheti a kulcsos hitelesítést:Optionally, enable key authentication:

    PubkeyAuthentication yes
    
  3. Indítsa újra az sshd szolgáltatást.Restart the sshd service.

    sudo launchctl stop com.openssh.sshd
    sudo launchctl start com.openssh.sshd
    

HitelesítésAuthentication

A PowerShell távoli SSH-kapcsolaton keresztüli hitelesítése az SSH-ügyfél és az SSH-szolgáltatás közötti hitelesítési Exchange-re támaszkodik, és nem valósít meg saját hitelesítési sémákat.PowerShell remoting over SSH relies on the authentication exchange between the SSH client and SSH service and doesn't implement any authentication schemes itself. Ennek eredményeképpen minden konfigurált hitelesítési séma, beleértve a többtényezős hitelesítést is, az SSH és a PowerShelltől függetlenül kezeli.The result is that any configured authentication schemes including multi-factor authentication are handled by SSH and independent of PowerShell. Beállíthatja például, hogy az SSH szolgáltatás megkövetelje a nyilvános kulcsos hitelesítést, valamint egy egyszeri jelszót a további biztonság érdekében.For example, you can configure the SSH service to require public key authentication and a one-time password for added security. A többtényezős hitelesítés konfigurációja kívül esik a dokumentáció hatókörén.Configuration of multi-factor authentication is outside the scope of this documentation. A többtényezős hitelesítés helyes konfigurálásához és a PowerShellen kívüli működésének ellenőrzéséhez tekintse meg az SSH dokumentációját, mielőtt a PowerShell távelérési szolgáltatással próbálja használni.Refer to documentation for SSH on how to correctly configure multi-factor authentication and validate it works outside of PowerShell before attempting to use it with PowerShell remoting.

Megjegyzés

A felhasználók megőrzik ugyanezeket a jogosultságokat a távoli munkamenetekben.Users retain the same privileges in remote sessions. Ez azt jelenti, hogy a rendszergazdák egy emelt szintű rendszerhéjhoz férnek hozzá, a normál felhasználók pedig nem.Meaning, Administrators have access to an elevated shell, and normal users will not.

PowerShell-távelérés – példaPowerShell remoting example

A távelérés tesztelésének legegyszerűbb módja egyetlen számítógép kipróbálása.The easiest way to test remoting is to try it on a single computer. Ebben a példában egy távoli munkamenetet hozunk létre ugyanarra a Linux-számítógépre.In this example, we create a remote session back to the same Linux computer. A PowerShell-parancsmagokat interaktívan használjuk, ezért a rendszer kéri az SSH-t, hogy ellenőrizze a gazdaszámítógép ellenőrzését és a jelszó megadását.We're using PowerShell cmdlets interactively so we see prompts from SSH asking to verify the host computer and prompting for a password. Ugyanezt megteheti a Windows rendszerű számítógépeken a távelérés működésének biztosításához.You can do the same thing on a Windows computer to ensure remoting is working. Ezután a számítógépek közötti távoli váltással módosítsa az állomásnév nevét.Then, remote between computers by changing the host name.

# Linux to Linux
#
$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' cannot 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 powershell }
Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName                    PSComputerName
-------  ------    -----      -----     ------     --  -- -----------                    --------------
      0       0        0         19       3.23  10635 635 powershell                     UbuntuVM1
      0       0        0         21       4.92  11033 017 powershell                     UbuntuVM1
      0       0        0         20       3.07  11076 076 powershell                     UbuntuVM1
#
# Linux to 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 to 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>

KorlátozásokLimitations

  • A sudo parancs nem működik távoli munkamenetben Linux rendszerű számítógépeken.The sudo command doesn't work in a remote session to a Linux computer.

  • Az SSH-kapcsolaton keresztüli PSRemoting nem támogatja a profilokat, és nem fér hozzá $PROFILE .PSRemoting over SSH does not support Profiles and does not have access to $PROFILE. A munkamenetben egyszer betöltheti a profilt, ha a profilt a teljes filepath beolvassa.Once in a session, you can load a profile by dot sourcing the profile with the full filepath. Ez nem kapcsolódik az SSH-profilokhoz.This is not related to SSH profiles. Az SSH-kiszolgálót beállíthatja úgy, hogy a PowerShellt használja alapértelmezett rendszerhéjként, és egy profilt SSH-n keresztül töltsön be.You can configure the SSH server to use PowerShell as the default shell and to load a profile through SSH. További információért tekintse meg az SSH dokumentációját.See the SSH documentation for more information.

  • A PowerShell 7,1 előtt a távoli eljáráshívás SSH-val nem támogatta a második ugrásos távoli munkameneteket.Prior to PowerShell 7.1, remoting over SSH did not support second-hop remote sessions. Ez a képesség a WinRM szolgáltatást használó munkamenetekre korlátozódik.This capability was limited to sessions using WinRM. A PowerShell 7,1 Enter-PSSession Enter-PSHostProcess bármilyen interaktív távoli munkamenetből engedélyezhető és használható.PowerShell 7.1 allows Enter-PSSession and Enter-PSHostProcess to work from within any interactive remote session.

Lásd mégSee also

A PowerShell Core telepítése Linux rendszerenInstalling PowerShell Core on Linux

A PowerShell Core telepítése macOS rendszerenInstalling PowerShell Core on macOS

A PowerShell Core telepítése Windows rendszerreInstalling PowerShell Core on Windows

A Windows kezelése az OpenSSH-valManage Windows with OpenSSH

OpenSSH-kulcsok kezeléseManaging OpenSSH Keys

Ubuntu SSHUbuntu SSH