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
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
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.
Szerkessze a
sshd_config
következő helyen$env:ProgramData\ssh
talá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ábanProgra~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.
Indítsa újra az sshd szolgáltatást.
Restart-Service sshd
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 assh.exe
találatok keresését.
Az SSH szolgáltatás telepítése Ubuntu Linux rendszerű számítógépre
A PowerShell legújabb verziójának telepítése: A PowerShell telepítése az Ubuntu-on.
Telepítse az Ubuntu OpenSSH-kiszolgálót.
sudo apt install openssh-client sudo apt install openssh-server
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.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
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:
- Nyílt
System Settings
. - Kattintson a
General
(Törlés) gombra - Kattintson a
Sharing
lehetőségre. - Ellenőrizze, hogy be van-e
Remote Login
állítvaRemote Login: On
. - Hozzáférés engedélyezése a megfelelő felhasználókhoz.
- Nyílt
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
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
ésEnter-PSHostProcess
használható.