PowerShell távoli eljáráshívás SSH-n keresztül

Áttekintés

A PowerShell-remoting általában a WinRM-et használja a kapcsolat egyeztetéséhez és az adatátvitelhez. Az SSH már elérhető Linux- és Windows-platformokon, és lehetővé teszi a többplatformos PowerShell-újraírást.

A WinRM robusztus üzemeltetési modellt biztosít a Távoli PowerShell-munkamenetekhez. Az SSH-alapú remoting jelenleg nem támogatja a távoli végpontkonfigurációt és a Just Enough Rendszergazda istration (JEA) használatát.

Az SSH-remoting lehetővé teszi a PowerShell-munkamenetek alapszintű újraegyezését Windows és Linux rendszerű számítógépek között. Az SSH-remoting egy PowerShell-gazdafolyamatot hoz létre a célszámítógépen SSH-alrendszerként. Végül implementálunk egy, a WinRM-hez hasonló általános üzemeltetési modellt a végpontkonfiguráció és a JEA támogatásához.

A New-PSSession, Enter-PSSessionés Invoke-Command parancsmagok most már rendelkeznek egy új paraméterkészlettel, amely támogatja ezt az új újrakapcsolódási kapcsolatot.

[-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 UserName paraméterrel. A parancsmagok interaktív futtatásakor a rendszer jelszót kér. Az SSH-kulcshitelesítést a KeyFilePath paraméterrel rendelkező titkos kulcsfájllal is használhatja. Az SSH-hitelesítés kulcsainak létrehozása platformonként eltérő.

Általános beállítási információk

A PowerShell 6-os vagy újabb verzióját, az SSH-t pedig minden számítógépre telepíteni kell. Telepítse az SSH-ügyfelet (ssh.exe) és a kiszolgálót (sshd.exe), hogy távolról is elérhető legyen a számítógépek között. A Windows OpenSSH mostantól elérhető a Windows 10 1809-ben és a Windows Server 2019-ben. További információ: Windows kezelése OpenSSH-val. Linux esetén telepítse az SSH-t, beleértve az sshd-kiszolgálót is, amely megfelel a platformnak. Az SSH-újraküldési funkció beszerzéséhez telepítenie kell a PowerShellt a GitHubról. Az SSH-kiszolgálót úgy kell konfigurálni, hogy hozzon létre egy SSH-alrendszert a PowerShell-folyamat távoli számítógépen való üzemeltetéséhez. Emellett engedélyeznie kell a jelszót vagy a kulcsalapú hitelesítést.

Az SSH szolgáltatás telepítése Windows rendszerű számítógépre

  1. Telepítse a PowerShell legújabb verzióját. További információ: A PowerShell telepítése Windows rendszeren.

    A paraméterkészletek felsorolásával ellenőrizheti, hogy a PowerShell rendelkezik-e SSH-újraküldési New-PSSession támogatással. Megfigyelheti, hogy vannak olyan paraméterkészlet-nevek, amelyek SSH-val kezdődnek. Ezek a paraméterkészletek SSH-paramétereket tartalmaznak.

    (Get-Command New-PSSession).ParameterSets.Name
    
    Name
    ----
    SSHHost
    SSHHostHashParam
    
  2. Telepítse a legújabb Win32 OpenSSH-t. A telepítési utasításokért tekintse meg az OpenSSH használatának első lépéseit.

    Feljegyzés

    Ha az OpenSSH alapértelmezett rendszerhéjaként szeretné beállítani a PowerShellt, olvassa el a Windows openSSH-hoz való konfigurálása című témakört.

  3. Szerkessze a sshd_config következő helyen $env:ProgramData\sshtalálható fájlt: .

    Győződjön meg arról, hogy a jelszóhitelesítés engedélyezve van:

    PasswordAuthentication yes
    

    Hozza létre azt az SSH-alrendszert, amely PowerShell-folyamatot futtat a távoli számítógépen:

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

    Feljegyzés

    A PowerShell 7.4-től kezdve már nem kell használnia a paramétert a -nologo PowerShell SSH-kiszolgáló módban való futtatásakor.

    Feljegyzés

    A Végrehajtható PowerShell alapértelmezett helye a következő c:/progra~1/powershell/7/pwsh.exe: . A hely a PowerShell telepítésétől függően változhat.

    A szóközöket tartalmazó fájl elérési útjaihoz a 8.3 rövid nevet kell használnia. A Windows OpenSSH-ban hiba történt, amely megakadályozza, hogy a szóközök az alrendszer végrehajtható elérési útjaiban dolgozzanak. További információkért tekintse meg ezt a GitHub-problémát.

    A Windows mappájának Program Files 8.3 rövid neve általában Progra~1. A következő paranccsal azonban meggyőződhet arról, hogy:

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

    Opcionálisan engedélyezze a kulcshitelesítést:

    PubkeyAuthentication yes
    

    További információ: OpenSSH-kulcsok kezelése.

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

    Restart-Service sshd
    
  5. Adja hozzá azt az elérési utat, amelyen az OpenSSH telepítve van az Elérési út környezeti változóhoz. Például: C:\Program Files\OpenSSH\. Ez a bejegyzés lehetővé teszi a ssh.exe találatok keresését.

Az SSH szolgáltatás telepítése Ubuntu Linux rendszerű számítógépre

  1. A PowerShell legújabb verziójának telepítése: A PowerShell telepítése az Ubuntu-on.

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

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. Szerkessze a sshd_config fájlt a helyszínen /etc/ssh.

    Győződjön meg arról, hogy a jelszóhitelesítés engedélyezve van:

    PasswordAuthentication yes
    

    Opcionálisan engedélyezze a kulcshitelesítést:

    PubkeyAuthentication yes
    

    További információ az SSH-kulcsok Ubuntu-on való létrehozásáról: ssh-keygen.

    PowerShell-alrendszerbejegyzés hozzáadása:

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

    Feljegyzés

    A Végrehajtható PowerShell alapértelmezett helye a következő /usr/bin/pwsh: . A hely a PowerShell telepítésétől függően változhat.

    Feljegyzés

    A PowerShell 7.4-től kezdve már nem kell használnia a paramétert a -nologo PowerShell SSH-kiszolgáló módban való futtatásakor.

  4. Indítsa újra az ssh szolgáltatást.

    sudo systemctl restart sshd.service
    

Az SSH szolgáltatás telepítése macOS-számítógépre

  1. Telepítse a PowerShell legújabb verzióját. További információ: A PowerShell telepítése macOS rendszeren.

    Az alábbi lépések végrehajtásával győződjön meg arról, hogy az SSH-újraküldés engedélyezve van:

    1. Nyílt System Settings.
    2. Kattintson a General (Törlés) gombra
    3. Kattintson a Sharing lehetőségre.
    4. Ellenőrizze, hogy be van-e Remote Login állítva Remote Login: On.
    5. Hozzáférés engedélyezése a megfelelő felhasználókhoz.
  2. Szerkessze a sshd_config fájlt a helyszínen /private/etc/ssh/sshd_config.

    Használjon szövegszerkesztőt, például nano:

    sudo nano /private/etc/ssh/sshd_config
    

    Győződjön meg arról, hogy a jelszóhitelesítés engedélyezve van:

    PasswordAuthentication yes
    

    PowerShell-alrendszerbejegyzés hozzáadása:

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

    Feljegyzés

    A Végrehajtható PowerShell alapértelmezett helye a következő /usr/local/bin/pwsh: . A hely a PowerShell telepítésétől függően változhat.

    Feljegyzés

    A PowerShell 7.4-től kezdve már nem kell használnia a paramétert a -nologo PowerShell SSH-kiszolgáló módban való futtatásakor.

    Opcionálisan engedélyezze a kulcshitelesítést:

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

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

Feljegyzés

Az operációs rendszer frissítésekor előfordulhat, hogy az SSH-konfigurációs fájl felülíródik. Ellenőrizze a konfigurációs fájlt a frissítés után.

Hitelesítés

Az SSH-n keresztüli PowerShell-remotálás az SSH-ügyfél és az SSH-szolgáltatás közötti hitelesítési cserére támaszkodik, és nem implementálja magát a hitelesítési sémákat. Az eredmény az, hogy minden konfigurált hitelesítési sémát, beleértve a többtényezős hitelesítést, az SSH kezeli, és független a PowerShell-lel. Konfigurálhatja például az SSH szolgáltatást úgy, hogy nyilvános kulcsú hitelesítést és egyszeri jelszót igényeljen a további biztonság érdekében. A többtényezős hitelesítés konfigurálása nem tartozik a dokumentáció hatókörébe. Tekintse meg az SSH dokumentációját, amely bemutatja, hogyan konfigurálhatja helyesen a többtényezős hitelesítést, és hogyan ellenőrizheti, hogy a PowerShell-en kívül is működik-e, mielőtt megpróbálkozza használni a PowerShell-újraformálással.

Feljegyzés

A felhasználók ugyanazokat a jogosultságokat őrzik meg a távoli munkamenetekben. Ez azt jelenti, hogy Rendszergazda istratorok hozzáféréssel rendelkeznek egy emelt szintű felülethez, és a normál felhasználók nem.

Példa a PowerShell-remotingra

Az újraformálás tesztelésének legegyszerűbb módja, ha egyetlen számítógépen próbálja ki. Ebben a példában egy távoli munkamenetet hozunk létre ugyanarra a Linux-számítógépre. Interaktívan használjuk a PowerShell-parancsmagokat, így az SSH kéri, hogy ellenőrizze a gazdaszámítógépet, és jelszót kérjen. Ugyanezt megteheti a Windows rendszerű számítógépeken is annak érdekében, hogy az újraformálás működjön. Ezután a gazdagép nevének módosításával távolról a számítógépek között.

Linuxról Linuxra

$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

Linuxról Windowsra

Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]

Windowsról Windowsra

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ások

  • A sudo parancs nem működik távoli munkamenetben Linux rendszerű számítógépeken.

  • Az SSH-val való PSRemoting nem támogatja a profilokat, és nem rendelkezik hozzáféréssel.$PROFILE Miután egy munkamenetben betölti a profilt, a teljes fájlútvonallal beolvashatja a profilt. Ez nem SSH-profilokhoz kapcsolódik. Konfigurálhatja az SSH-kiszolgálót úgy, hogy a PowerShellt használja alapértelmezett rendszerhéjként, és betöltse a profilt az SSH-val. További információt az SSH dokumentációjában talál.

  • A PowerShell 7.1-et megelőzően az SSH-ra való átnevezés nem támogatja a második ugrásos távoli munkameneteket. Ez a képesség a WinRM-t használó munkamenetekre korlátozódott. A PowerShell 7.1 bármilyen interaktív távoli munkameneten belül lehetővé teszi Enter-PSSession és Enter-PSHostProcess használható.

Lásd még