Tanuld meg a PowerShell SSH remoting beállítását és használatát

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

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

megszoktuk, hogy a szoftvereket a varázslók segítségével telepítjük Windowsra, de az OpenSSH telepítése több háttérinformációt és több munkát igényel a rendszergazdától.

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:

  1. Windows 10 1809, Windows Server 1809, Windows Server 2019 és újabb rendszereken az OpenSSH opcionális szolgáltatásként érhető el.
  2. 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*'
OpenSSH komponensek
1.ábra. Keresse meg az OpenSSH összetevőket a rendszerében.

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.

távoli kezelési munkamenetek
2.ábra. Használja a WS-MAN és az SSH munkameneteket együtt a távoli gépek kezeléséhez.

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.
Bevezetés Az SSH-ba a PowerShell maggal.

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.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.