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.0Telepí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_configEngedélyezze az SSH-jelszavas hitelesítést a következő sor megjegyzéseinek törlésével:
PasswordAuthentication yesAz SSH-hozzáférést kulcsokkal is engedélyezheti:
PubkeyAuthentication yesAdja 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 -NoLogoMentse az sshd_config fájlt, és indítsa újra az sshd szolgáltatást:
restart-service sshdHogyan 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-serverAdja hozzá az alábbi sorokat az /etc/ssh/sshd_config fájlhoz:
PasswordAuthentication yes
Subsystem powershell /usr/bin/pwsh -sshs -NoLogoIndítsa újra az ssh szolgáltatást:
sudo systemctl restart sshd.servicePSRemoting 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-PSSessionEnter-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.exegyors).
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 maxbakA 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 -SSHTransportHa 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, OSEbben 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 $sshConnectionsAz 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ó.



