Weboldal keresés

A PowerShell Remoting használata SSH-n keresztül


A klasszikus Windows PowerShell-verziókban (5.1-ig) csak a WinRM protokollt (WSMan, 5985/5986-os port) használhatja a távoli számítógépek eléréséhez a PSRemoting használatával. A PowerShell Core 7.x és 6.x újabb, többplatformos verzióiban használhatja az SSH-t a PowerShell-távirányításhoz a számítógépek között. Próbáljuk meg beállítani a PSRemotingot SSH-n keresztül, hogy csatlakozzon Windows, Linux vagy macOS gazdagépekhez.

Az SSH PowerShell Remoting engedélyezése a Windows rendszerben

Nézzük meg, hogyan konfigurálhatunk SSH-kiszolgálót a Windows ügyféloldalán a PowerShell Remoting engedélyezéséhez.

Először engedélyezze a beépített OpenSSH-kiszolgálót Windows 10 (1809-es vagy újabb verzió) és Windows Server 2019 rendszeren. Telepítse az SSH-kiszolgálót a következő paranccsal (Windows 10 vagy 11 rendszerben):

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Telepítse a PowerShell Core legújabb verzióját is:

iex "& { $(irm https://aka.ms/install-powershell.ps1) } -UseMSI"

Ezután engedélyezze az sshd szolgáltatás automatikus indítását a szolgáltatáskezelési PowerShell-parancsmagok használatával:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

Győződjön meg arról, hogy a Windows most a TCP/22 (SSH) porton figyel:

Get-NetTCPConnection -State Listen|where {$_.localport -eq '22'}

Bejövő SSH-kapcsolatok engedélyezése a Windows Defender tűzfalban:

Enable-NetFirewallRule -Name *OpenSSH-Server*

Ezután nyissa meg a C:\ProgramData\ssh\sshd_config konfigurációs fájlt:

notepad $Env:ProgramData\ssh\sshd_config

Engedélyezze az SSH-jelszavas hitelesítést a következő sor megjegyzéseinek törlésével:

PasswordAuthentication yes

Az SSH-hozzáférést kulcsokkal is engedélyezheti:

PubkeyAuthentication yes

Adja hozzá az alábbi sort a fájlhoz. A távoli SSH-kapcsolatokhoz a pwsh.exe értelmezőt fogja futtatni:

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

Mentse az sshd_config fájlt, és indítsa újra az sshd szolgáltatást:

restart-service sshd

Hogyan engedélyezhető a PowerShell SSH Remoting Linuxon?

Most nézzük meg, hogyan konfigurálhat egy Linux-gazdagépet a PowerShell Remoting számára SSH-n keresztül.

Telepítse a PowerShell Core-t Linux disztribúciójára az útmutató szerint. A következő parancsokat használom az Ubuntu 20.04 gazdagépemhez:

$ sudo apt-get update -y
$ wget -q https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt-get update
$ sudo apt-get install powershell -y

OpenSSH szerver telepítése (ha nincs telepítve):

$ sudo apt install openssh-server

Adja hozzá az alábbi sorokat az /etc/ssh/sshd_config fájlhoz:

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

Indítsa újra az ssh szolgáltatást:

sudo systemctl restart sshd.service

PSRemoting SSH-n keresztül példákkal

Mostantól csatlakozhat egy konfigurált Windows vagy Linux gazdagéphez az SSH-n keresztüli PowerShell használatával. A távoli számítógépek SSH-n keresztüli eléréséhez ugyanazokat a parancsmagokat kell használni, mint a WinRM-ben:

  • New-PSSession
  • Enter-PSSession

    - interaktív PowerShell-munkamenet létrehozása távoli gazdagéppel

  • Invoke-Command

    - parancsok vagy PS1 szkriptek távoli futtatása

Alapértelmezés szerint ezek a parancsmagok a WinRM segítségével próbálnak csatlakozni távoli számítógépekhez. Az SSH-átvitel használatához más csatlakozási lehetőségeket kell használnia (amelyek a PowerShell Core-ban érhetők el, ezért ezeket a

 pwsh.exe

gyors).

A -HostName (a -ComputerName helyett) és a -UserName (a -Credential helyett) beállítások lehetővé teszik az SSH-kapcsolat számítógépnevének és felhasználójának beállítását. A -KeyFilePath paraméterrel megadhat SSH-kulcsokat a hitelesítéshez (nem kötelező). Használhatja a -SSHTransport paramétert is, hogy kifejezetten engedélyezze az SSH-átvitelt a PowerShell-forgalom számára

Próbáljunk meg interaktív módon csatlakozni egy távoli számítógéphez a Windowsból a beépített SSH-kliens segítségével:

Enter-PSSession -HostName 192.168.50.20 -UserName maxbak

A csatlakozáshoz elegendő egy szerver SSH-ujjlenyomatának megerősítése és a távoli csatlakozásra jogosult felhasználó jelszavának megadása.

Több állandó PowerShell-munkamenetet is létrehozhat távoli számítógépeken, és parancsokat hajthat végre rajtuk SSH-n keresztül:

$session1 = New-PSSession -HostName 192.168.50.20 -UserName maxbak -SSHTransport
$session2 = New-PSSession -HostName 192.168.54.44 -UserName root -SSHTransport

Ha egy parancsot egyszerre több számítógépen szeretne futtatni, használja az alábbi parancsot:

Invoke-Command -Session $session1, $session2 -ScriptBlock { $PSVersionTable| select OS, PSVersion}| Select-Object PSComputerName, PSVersion, OS

Ebben a példában a parancsot Windows és Linux számítógépen is futtattuk, és a kimenetet megjelenítettük a konzolon.

A PowerShell Core 7.1 és újabb verzióiban a PSRemoting támogatja a dupla ugrást egy másik távoli számítógépre egy meglévő munkamenetről.

Több SSH-munkamenetet is megadhat az opcióban, és hitelesíthet RSA-kulcsokat:

$sshConnections = @{HostName="winsrv1"; UserName="a-d\maxbak"; KeyFilePath="c:\users\maxbak\id_rsa" }, @{ HostName="root@ubunsrv1"; KeyFilePath="c:\vault\ubunsrv1_id_rsa" }
New-PSSession -SSHConnection $sshConnections

Az SSH-n keresztüli PowerShell Remoting fő korlátai:

  • A PowerShell-profilok nem támogatottak;

  • Linux gazdagépekkel folytatott távoli munkamenetekben a sudo nem támogatott (futtatáskor a következő hibaüzenet jelenik meg:

    sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper

    );

  • A Just Enough Administration (JEA) nem támogatott.

Amint láthatja, a PowerShell Remoting konfigurálása SSH-n keresztül sokkal egyszerűbb, mint a WinRM HTTPS-en keresztül. Ezenkívül ezt a csatlakozási módot használhatja a munkacsoport számítógépeihez való csatlakozáshoz a PowerShell használatával anélkül, hogy hozzáadná őket a TrustedHosthoz.

A PowerShell Remoting SSH-n keresztül a WinRM biztonságos és egyszerű alternatívája. Az SSH-n keresztüli PSremoting minden platformon (Windows, Linux, macOS), minden további megnyitható porton (kivéve a TCP/22 SSH-t) támogatott, és könnyen konfigurálható.

Kapcsolódó cikkek