amikor a Microsoft azt mondta, hogy a PowerShell egy nyílt forráskódú projekt lesz, amely Windows, Linux és macOS rendszeren fut majd 2016 augusztusában, volt egy érdekes ránc a PowerShell távirányításával kapcsolatban.
a Microsoft azt mondta, hogy ez a PowerShell mag támogatja a remotálást a Secure Shell (SSH), valamint a Web Services-Management (WS-MAN) segítségével. Mindig használhatja a PowerShell SSH bináris fájlokat, de a bejelentés szerint az SSH támogatás a PowerShell szerves része lenne. Ez lehetővé tette a Windows és Linux rendszerek távoli adminisztrációját ugyanazon technológiák használatával.
- A PowerShell távvezérlésének rövid története
- az SSH bemutatása a PowerShell Core-on
- az OpenSSH telepítése
- az OpenSSH opcionális funkció telepítése
- töltse le az OpenSSH-t a Githubról
- az OpenSSH beállítása
- A PowerShell SSH távvezérlés használata
- SSH kulcsalapú hitelesítés használata
- WS-MAN vagy SSH távvezérlés?
A PowerShell távvezérlésének rövid története
a Microsoft bevezette a távvezérlést a PowerShell 2.0-s verziójában A Windows 7 és a Windows Server 2008 R2 rendszerben, ami drámai módon megváltoztatta a Windows rendszergazdák helyzetét. Távoli asztali munkameneteket hozhattak létre a kiszolgálók számára, de a PowerShell távvezérlése lehetővé tette nagyszámú szerver egyidejű kezelését.
a távvezérlés a Windows PowerShellben a WS-MAN-en alapul, amely az elosztott menedzsment Munkacsoport nyílt szabványa. De mivel a WS-MAN alapú távvezérlés Windows-orientált, más technológiát, általában SSH-t kellett használnia a Linux rendszerek adminisztrálásához.
az SSH bemutatása a PowerShell Core-on
az SSH egy protokoll a rendszerek kezelésére egy esetleg nem biztonságos hálózaton keresztül. Az SSH kliens-szerver módban működik, és a de facto szabvány a távoli adminisztrációhoz Linux környezetben.
a PowerShell Core az OpenSSH-t használja, az SSH 1.2.12 villáját, amelyet nyílt forráskódú licenc alatt adtak ki. Az OpenSSH valószínűleg a legnépszerűbb SSH megvalósítás.
a WS-MAN távvezérléshez szükséges kód A Windows operációs rendszer részeként van telepítve. Az OpenSSH-t manuálisan kell telepítenie.
az OpenSSH telepítése
megszoktuk, hogy a szoftvereket a varázslók segítségével telepítjük a Windows rendszerre, de az OpenSSH telepítése több háttérinformációt és több munkát igényel a rendszergazdától. Kézi beavatkozás nélkül sok kérdés merülhet fel.
az OpenSSH Windows rendszeren történő telepítési folyamata az idő múlásával javult, de még mindig nem olyan egyszerű, mint amilyennek lennie kellene. A konfigurációs fájl használata sok kívánnivalót hagy maga után.
két lehetőség van a PowerShell SSH telepítésekor:
- Windows 10 1809, Windows Server 1809, Windows Server 2019 és újabb rendszereken az OpenSSH opcionális szolgáltatásként érhető el.
- A Windows korábbi verzióiban letöltheti és telepítheti az OpenSSH-t a Githubról.
az OpenSSH telepítése előtt ellenőrizze, hogy a rendszer rendelkezik-e a legújabb javításokkal.
az OpenSSH opcionális funkció telepítése
az OpenSSH opcionális funkciót a PowerShell használatával telepítheti. Először ellenőrizze a rendszert a következő paranccsal:
Get-WindowsCapability -Online | where Name -like '*SSH*'
az 1.ábra az OpenSSH kliens szoftver előtelepítését mutatja.
a telepítéshez Windows PowerShell-t kell használnia, hacsak nem tölti le a Windowscompatibility modult a PowerShell Core-hoz. Ezután importálhatja a telepítési kép szervizelési és felügyeleti modult A Windows Powershellből, és futtathatja a parancsokat a PowerShell Core alkalmazásban.
telepítse a szerver funkciót:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Path :
Online : True
RestartNeeded : False
az SSH fájlok telepítése a C:\Windows\System32\OpenSSH mappa.
töltse le az OpenSSH-t a Githubról
Kezdje azzal, hogy letölti a legújabb verziót a Githubról. A telepítési utasítások legújabb verziója ezen a linken található.
a letöltés befejezése után bontsa ki a zip fájlt a C:\Program fájlok \ OpenSSH mappa. HELY MÓDOSÍTÁSA C:\Program Files \ OpenSSH az SSH szolgáltatások telepítéséhez:
.\install-sshd.ps1
SetServiceObjectSecurity SUCCESS
ChangeServiceConfig2 SUCCESS
ChangeServiceConfig2 SUCCESS
az OpenSSH beállítása
az OpenSSH telepítése után hajtson végre néhány további konfigurációs lépést.
győződjön meg arról, hogy az OpenSSH mappa szerepel a rendszer elérési útja környezeti változóban:
- C:\Windows\System32\OpenSSH\ ha a Windows opcionális funkciójaként van telepítve
- C:\Program Files \ OpenSSH \ ha az OpenSSH letöltéssel van telepítve
állítsa be a két szolgáltatás automatikus indítását:
Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic
ha az OpenSSH-t az opcionális funkcióval telepítette, akkor a Windows létrehoz egy új tűzfalszabályt, amely lehetővé teszi az SSH bejövő hozzáférését a 22-es porton keresztül. Ha telepítette az OpenSSH-t a letöltésből, akkor hozza létre a tűzfalszabályt a következő paranccsal:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' `
-Enabled True -Direction Inbound -Protocol TCP `
-Action Allow -LocalPort 22
indítsa el az sshd szolgáltatást az SSH kulcsok létrehozásához:
Start-Service sshd
az SSH kulcsok és a konfigurációs fájl C:\ProgramData\ssh, amely egy rejtett mappa. Az SSH által használt alapértelmezett héj a Windows parancshéj. Ezt PowerShell-re kell váltani:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Program Files\PowerShell\6\pwsh.exe" -PropertyType String -Force
Most, amikor SSH-n keresztül csatlakozik a rendszerhez, a PowerShell Core elindul, és az alapértelmezett shell lesz. Azt is, hogy az alapértelmezett shell Windows PowerShell, ha szükséges.
hiba van az OpenSSH-ban a Windows rendszeren. Nem működik szóközzel rendelkező útvonalakkal, például a PowerShell Core futtatható elérési útjával! A megoldás egy szimbolikus link létrehozása, amely létrehoz egy elérési utat, amelyet az OpenSSH használhat:
New-Item -ItemType SymbolicLink -Path C:\pwsh -Target 'C:\Program Files\PowerShell\6'
az sshd_config fájlban szüntesse meg a következő sorok megjegyzését:
PubkeyAuthentication yes
PasswordAuthentication yes
adja hozzá ezt a sort más alrendszersorok elé:
Subsystem powershell C:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile
Ez azt mondja az OpenSSH-nek, hogy futtassa a PowerShell magot.
kommentálja a sort:
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
Miután elmentette a módosításokat az sshd_config fájlba, indítsa újra a szolgáltatásokat:
Restart-Service sshd
Start-Service ssh-agent
a konfigurációs fájl bármilyen módosítása után újra kell indítania az sshd szolgáltatást.
A PowerShell SSH távvezérlés használata
az SSH feletti távvezérlés használata nagyon hasonló a WS-MAN feletti távvezérléshez. A távoli rendszert közvetlenül az Invoke-paranccsal érheti el:
Invoke-Command -HostName W19DC01 -ScriptBlock {Get-Process}
richard@MANTICORE@w19dc01's password:
a jelszó kérése jelenik meg, amely nem jelenik meg gépelés közben.
Ha ez az első alkalom, hogy SSH-n keresztül csatlakozik a távoli rendszerhez, akkor ehhez hasonló üzenetet fog látni:
The authenticity of host 'servername (10.00.00.001)' can't be established.
ECDSA key fingerprint is SHA256:(<a large string>).
Are you sure you want to continue connecting (yes/no)?
írja be a yes parancsot, majd nyomja meg az Enter billentyűt.
létrehozhat egy távoli munkamenetet:
$sshs = New-PSSession -HostName W19FS01
richard@MANTICORE@w19fs01's password:
majd használhatja:
Invoke-Command -Session $sshs -ScriptBlock {$env:COMPUTERNAME}
W19FS01
az OpenSSH távoli munkamenetet az Enter-PSSession használatával ugyanúgy megadhatja, mint a WS-MAN munkamenetet. Megadhat egy meglévő munkamenetet, vagy használhatja az Enter-PSSession HostName paraméterét az interaktív munkamenet létrehozásához.
nem lehet leválasztani egy SSH alapú munkamenetet; ez egy WS-MAN technika.
A WS-MAN és az SSH munkamenetek segítségével több számítógépet kezelhet a 2.ábrán látható módon.
a szekcióinformáció megmutatja a különböző transzport mechanizmusokat-a WS-MAN és az SSH-t -, valamint az egyes szekciók által használt végpontot.
ha jobban megnézi a 2.ábrát, észre fogja venni, hogy az SSH munkamenetben nem volt jelszó kérése, mert a rendszer SSH kulcs alapú hitelesítéssel lett beállítva.
SSH kulcsalapú hitelesítés használata
nyisson meg egy emelt szintű PowerShell-munkamenetet. Változtassa meg a helyet a .ssh mappa a felhasználói területen:
Set-Location -Path ~\.ssh
generálja a kulcspárt:
ssh-keygen -t ed25519
adja hozzá a kulcsfájlt az SSH-ügynökhöz a helyi gépen:
ssh-add id_ed25519
Miután hozzáadta a privát kulcsot az SSH-agenthez, készítsen biztonsági másolatot a privát kulcsról egy biztonságos helyre, majd törölje a kulcsot a helyi gépről.
másolja az id_ed25519-et.pub fájlt a .ssh mappa a megfelelő felhasználói fiókhoz a távoli kiszolgálón. Létrehozhat ilyen fiókot, ha szükséges:
$pwd = Read-Host -Prompt 'Password' -AsSecureString
Password: ********
New-LocalUser -Name Richard -Password $pwd -PasswordNeverExpires
Add-LocalGroupMember -Group Administrators -Member Richard
a távoli gépen másolja a kulcsfájl tartalmát az authorized_keys fájlba:
scp id_ed25519.pub authorized_keys
az authorized_keys fájl engedélyeinek módosítása szükséges:
- nyissa meg a Fájlkezelőt, kattintson a jobb gombbal az authorized_keys elemre, majd keresse meg a Tulajdonságok – biztonság – speciális
- kattintson az öröklés letiltása elemre.
- válassza az örökölt engedélyek konvertálása explicit engedélyekké ezen az objektumon.
- távolítson el minden engedélyt, kivéve a rendszert és a felhasználói fiókot. Mindkettőnek teljes ellenőrzést kell kapnia.
hivatkozásokat fog látni az OpenSSHUtils modul használatára az engedélyek beállításához, de van egy hiba a PowerShell Galéria verziójában, amely használhatatlanná teszi az authorized_keys fájlt.
indítsa újra az sshd szolgáltatást a távoli gépen.
mostantól jelszó használata nélkül is csatlakozhat a távoli géphez a 2.ábrán látható módon.
ha nem tartományi géphez csatlakozik a tartományban lévő gépről, akkor a Kulcspáros hitelesítés engedélyezése után a felhasználónév paramétert kell használnia:
$ss = New-PSSession -HostName W19ND01 -UserName Richard
a távoli gépen lévő felhasználónévre van szüksége, hogy megfeleljen a domain felhasználónevének. A rendszer nem kéri a jelszót.
WS-MAN vagy SSH távvezérlés?
ws-MAN vagy SSH alapú távvezérlést használjon? A WS-MAN távvezérlés minden Windows rendszeren elérhető, és alapértelmezés szerint engedélyezve van a Windows Server 2012 és újabb kiszolgálóverziókon. A WS-MAN távvezérlésének van néhány kérdése, nevezetesen a double hop kérdés. A WS-MAN-nek további munkára van szüksége a távoli, nem domain rendszerekhez.
az SSH távvezérlés csak a PowerShell magban érhető el; a Windows PowerShell csak a WS-MAN távvezérlésre korlátozódik. Az SSH távvezérlés telepítése és konfigurálása jelentős munkát igényel. A dokumentáció nem olyan jó, mint amilyennek lennie kellene. Az SSH távvezérlés előnye, hogy könnyen hozzáférhet nem domain gépekhez és nem Windows rendszerekhez, ahol az SSH a távoli hozzáférés szabványa.