Megosztás a következőn keresztül:


PowerShell távoli eléré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 valódi többplatformos PowerShell-távoli elé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 Administrationt (JEA).

Az SSH távoli elérés lehetővé teszi az alapszintű PowerShell távoli munkamenet-kezelést a Windows és a 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 mostantól új paraméterkészlettel rendelkeznek az új távoli kapcsolat támogatásához.

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

Távoli munkamenet létrehozásához meg kell adnia a célszámítógépet a HostName paraméterrel, és meg kell adnia a felhasználónevet UserName. A parancsmagok interaktív futtatásakor a rendszer jelszót kér. Az SSH-kulcshitelesítést egy titkos kulcsfájllal is használhatja a KeyFilePath paraméterrel. 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 szervert (sshd.exe), hogy a számítógépekhez távolról is hozzáférhessen. A Windows OpenSSH mostantól elérhető a Windows 10 1809-ben és a Windows Server 2019-ben. További információkért lásd: 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 távoli kapcsolat funkció eléré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 jelszó- vagy 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 Windowsrendszeren.

    A New-PSSession paraméterkészletek listázásával ellenőrizheti, hogy a PowerShell rendelkezik-e SSH távoli elérés támogatással. Megfigyelheti, hogy vannak olyan paraméterkészlet-nevek, amelyek SSH-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 lásd Az OpenSSHhasználatának első lépéseit.

    Megjegyzés

    Ha az alapértelmezett rendszerhéjaként szeretné beállítani a PowerShellt OpenSSH-hoz, tekintse meg a Windows konfigurálását az OpenSSH-hez: .

  3. Szerkessze a sshd_config fájlt $Env:ProgramData\sshhelyen.

    • 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
      

      Megjegyzés

      A Windows OpenSSH-ban hiba történt, amely megakadályozza, hogy szóközökkel rendelkező elérési utat használjon az alrendszer végrehajtható fájljaihoz. A probléma megkerülésére kétféleképpen lehet megoldást kínálni:

      • A Windows 8.3-as stílusú rövid név használata a PowerShell végrehajtható elérési útjának használatához
      • Szimbolikus hivatkozás létrehozása a végrehajtható PowerShell-hez, amely szóközök nélküli elérési utat eredményez

      További információt a PowerShell/Win32-OpenSSH adattár 784 .

      Csak a szóközt tartalmazó elérési út szegmensének 8,3 stílusú nevét kell megkapnia. Alapértelmezés szerint a PowerShell 7 telepítve van a C:\Program Files\PowerShell\7\. A 8,3 stílusú névnek Program Files kell lennie progra~1. A név ellenőrzéséhez használja a következő parancsot:

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

      A 8.3 név az NTFS fájlrendszer örökölt funkciója, amely letiltható. Ezt a funkciót engedélyezni kell ahhoz a kötethez, amelyre a PowerShell telepítve van.

      Másik lehetőségként létrehozhat egy szimbolikus hivatkozást a Végrehajtható PowerShellre, amely szóközök nélküli elérési utat eredményez. Ez a módszer azért ajánlott, mert lehetővé teszi a hivatkozás frissítését, ha a PowerShell végrehajtható elérési útja bármikor megváltozik, anélkül, hogy frissítenie kellene a sshd_config fájlt.

      A következő paranccsal hozzon létre egy szimbolikus hivatkozást a végrehajtható fájlra:

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

      Ez a parancs létrehozza a szimbolikus hivatkozást ugyanabban a könyvtárban, amelyet az OpenSSH-kiszolgáló használ a gazdagépkulcsok és egyéb konfiguráció tárolására.

    • 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 a PATH környezeti változóhoz. Például: C:\Program Files\OpenSSH\. Ez a bejegyzés lehetővé teszi a ssh.exe keresését.

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

  1. Telepítse a PowerShell legújabb verzióját, és lásd a PowerShell telepítése Ubuntu rendszerrerészt.

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

    sudo apt install openssh-client
    sudo apt install openssh-server
    
  3. Szerkessze a sshd_config fájlt a /etc/sshhelyen.

    • 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
      

      Megjegyzés

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

  4. Indítsa újra a 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-hoz.

    Az alábbi lépések végrehajtásával győződjön meg arról, hogy az SSH Távoli elérés engedélyezve legyen:

    1. Nyissa meg System Settings.
    2. Kattintson a General
    3. Kattintson a Sharing.
    4. A Remote Loginbeállításához ellenőrizze a Remote Login: On.
    5. Hozzáférés engedélyezése a megfelelő felhasználókhoz.
  2. Szerkessze a sshd_config fájlt a /private/etc/ssh/sshd_confighelyen.

    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
      

      Megjegyzés

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

    • 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
    

Megjegyzé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.

Megjegyzés

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

Példa PowerShell-távoli elérésre

A távoli kapcsolat tesztelésének legegyszerűbb módja, ha egyetlen számítógépen próbáljuk 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 egy Windows rendszerű számítógépen is annak érdekében, hogy a távoli elérés működjön. Ezután a gazdagép nevének módosításával lehetővé válik a számítógépek közötti távoli kapcsolódás.

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-n keresztüli PSRemoting nem támogatja a Profilokat, és nem fér hozzá a $PROFILE-hoz. A munkamenet során egyszer betöltheti a profilt a teljes fájlútvonal megadásával és pontosítással. 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 protokollal való távoli elérés nem támogatta a többugrásos távoli munkameneteket. Ez a képesség a WinRM-t használó munkamenetekre korlátozódott. A PowerShell 7.1 lehetővé teszi, hogy Enter-PSSession és Enter-PSHostProcess bármilyen interaktív távoli munkameneten belül működjön.

Lásd még