Weboldal keresés

A PowerShell SSH-kliens és a távoli használat magyarázata


Távoli szervert vagy hálózati eszközt kell kezelnie? Akkor valószínűleg SSH-t használ a csatlakozáshoz és kezeléshez. Az SSH protokoll lehetővé teszi, hogy biztonságosan csatlakozzon egy távoli eszközhöz nem biztonságos hálózaton (interneten) keresztül. Az SSH használatához a legtöbben SSH-kliens eszközt használnak, például a Putty-t. De tudta, hogy a PowerShell rendelkezik beépített SSH-klienssel?

A PowerShell SSH-ügyfél alapértelmezés szerint engedélyezve van a Windows 10 1809 és újabb verzióiban. Ez azt jelenti, hogy mostantól könnyedén csatlakozhat bármely távoli eszközhöz kedvenc parancssori eszközéről.

Az SSH-t a PowerShellben is használhatjuk egy másik Windows-gép távoli kezelésére, de az SSH-kiszolgáló futtatásához PowerShell 6 vagy újabb verziót kell használnia.

PowerShell SSH kliens

Az SSH használatának legáltalánosabb módja a PowerShellben az SSH-kliens. Feltételezve, hogy naprakészen tartja a Windows rendszert, alapértelmezés szerint engedélyeznie kell az SSH-t. Egyszerűen ellenőrizheti a PowerShell megnyitásával, és írja be a következő parancsot:

# type ssh and press enter
ssh

# Result:
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]

A PowerShell megnyitásával egyetlen paranccsal csatlakozhat távoli szerverhez vagy hálózati eszközhöz:

ssh <username>@<host_ip_address>

# For example:
ssh pi@192.168.1.210

Az IP-cím helyett a gazdagépnevet is használhatja. Ha nem ad meg felhasználónevet, akkor a rendszer a helyi felhasználói fiókját fogja használni.

Amikor megnyomja az entert, meg kell adnia az SSH-felhasználó jelszavát. Amikor először csatlakozik egy eszközhöz, el kell fogadnia a gazdagép kulcsát. Csak nyomja meg az Enter billentyűt, vagy írja be az igent.

Ha az SSH az alapértelmezett 22-es porttól eltérő porton fut, akkor módosíthatja a port számát a -P jelzővel:

ssh <username>@<host_ip_address> -P <port_number>

# For example
ssh pi@192.168.1.210 -P 1022

PowerShell SSH Keygen

Egyes távoli kiszolgálók vagy szolgáltatások csak SSH-kulcs használatával engedélyezik az SSH-hozzáférést. Létre kell hoznia egy helyi SSH-kulcsot, és fel kell töltenie a kulcsot a kiszolgálóra (vagy szolgáltatásokra), hogy az ellenőrizni tudja Önt, és biztonságos kapcsolatot tudjon létrehozni.

Az SSH-kulcs privát és nyilvános kulcsból létezik. A privát kulcsot meg kell őriznie a helyi gépen (és győződjön meg róla, hogy megtartja magának), és a nyilvános kulcs feltöltésre kerül a szerverre.

A PowerShell beépített SSH-kulcsgenerátorral rendelkezik, amellyel új kulcsot hozhat létre. Kulcs generálásához írja be a következő parancsot:

ssh-keygen -t Ed25519

# Result
Generating public/private Ed25519 key pair.
Enter file in which to save the key (C:\Users\lazyadmin/.ssh/id_ed25519): <press enter>

# It will ask for apassphrase, you can leave it empty - see below for more details
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

# Generated key
Your identification has been saved in C:\Users\lazyadmin/.ssh/id_ed25519.
Your public key has been saved in C:\Users\lazyadmin/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:1232131+ASdi123SscvBbwn9Qfxj0 lazyadmin@lab01
The key's randomart image is:
+--[ED25519 256]--+
| .o .            |
|..o+ .           |
|o..o .   o       |
|+..# o .         |
|=.+ =...S.       |
|.+.C.+. + E      |
|. *o@OO O. .     |
| = O*o  .        |
|. +++.           |
+----[SHA256]-----+

A -t Ed25519 opció egy újabb algoritmus, amelyet a kulcs létrehozására használnak. Előfordulhat, hogy régebbi rendszereken ez nem támogatott. Ezután használhatja a régebbi RSA titkosítási rendszert.

ssh-keygen -b 4096 -t RSA

A kulcsokat az Ön felhasználói profilja tárolja. Az elérési út megjelenik a kimenetben, de általában a következő helyre kerülnek mentésre:

%userprofile%\.ssh

SSH Keygen jelszó

Az ssh kulcs létrehozása során meg kell adnia egy jelszót, vagy hagyja üresen (alapértelmezett). A jelszó a helyi kulcs titkosítására szolgál. Így biztonságosan tárolhatja a helyi kulcsot. Ha valaki hozzáfér a kulcshoz, akkor a jelszó nélkül nem tudja használni.

A jelmondat használata előtt azonban egy fontos dolgot szem előtt kell tartania. Minden alkalommal meg kell adnia a jelszót, amikor az SSH-kulcsot használja. Az SSH-kulcsot legtöbbször automatizálásban használják, például a GitHub-szolgáltatásokban. Ezekben a használati esetekben a jelmondat használata nem lehetséges.

PowerShell távoli kapcsolat SSH-val

Az SSH-t a PowerShellben is használhatjuk távoli kapcsolat létrehozására egy másik számítógéppel vagy szerverrel. Ez történhet Windows számítógépek vagy Windows-Linux között, és fordítva.

PowerShell távoli munkamenet létrehozása két Windows-gép között már a WinRM segítségével is lehetséges volt. De mostantól SSH-t is használhat a kapcsolat létrehozásához. Az SSH előnye, hogy Windowson, Linuxon és macOS-en is használható.

PowerShell 6 vagy újabb verzióra lesz szüksége az SSH használatához a Windows és Linux gépek közötti távoli kapcsolatokhoz. Az alábbi példákban a PowerShell 7-et használom.

Telepítse az OpenSSH szervert

Az első lépés az OpenSSH-kiszolgáló telepítése Windows számítógépére. Mint említettük, az SSH-kliens most már telepítve van és alapértelmezés szerint engedélyezve van. De az SSH szerver nem.

Az alábbi parancsmaggal ellenőrizheti, hogy az OpenSSH-kiszolgáló telepítve van-e:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

# Result:
Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

Amint láthatja, az OpenSSH szerver nincs jelen. A PowerShell segítségével telepíthetjük/engedélyezhetjük:

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

A következő lépés az OpenSSH szerver indítása. Mivel ez egy olyan szolgáltatás, amelyet beállíthatunk úgy, hogy automatikusan elinduljon:

# Start the sshd service
Start-Service sshd

# Set the service to automatic start
Set-Service sshd -StartupType Automatic

Konfigurálja az SSH szervert

Módosítanunk kell az SSHD konfigurációs fájlt, hogy jelszóval hitelesíthessük, és a távoli gépen használhassuk a PowerShellt.

Ha nem konfiguráljuk az SSH-kiszolgálót, akkor csak az alapvető parancsokat használhatjuk a távoli gépen (Windows Shell Prompt).

Az összes PowerShell-parancsmag teljes körű használatához konfigurálnunk kell az SSH-kiszolgálót a PowerShell alrendszerként történő hozzáadásához.

Az SSHD konfigurációs fájl a programdata mappában tárolódik. Mivel már meg van nyitva a PowerShell, ezt fogjuk használni a konfigurációs fájl megnyitásához:

# Change the directory to the programdata folder> ssh
cd $env:ProgramData\ssh

# Open the configuration file in notepad
PS C:\ProgramData\ssh> notepad .\sshd_config

A konfigurációs fájlból távolítsa el a # jelet a Jelszó hitelesítés igen sor előtt, és adja hozzá a következő sort a konfigurációs fájlhoz. (a hely nem igazán számít, de aláírtam a „# alrendszerek alapértelmezés szerinti felülbírálása” részt)

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

Az új konfigurációs fájl betöltéséhez indítsa újra az SSHD szolgáltatást:

Restart-service sshd

SSH távvezérlés PowerShell segítségével

Miután az SSH-kiszolgáló telepítve van a szerverünkön, most már csatlakozhatunk hozzá a PowerShell segítségével a kliensünkön. Ugyanazt a parancsmagot használhatjuk, mint a WinRM távirányításnál, a különbség a gépnév és a számítógépnév között van.

  • Új-PSSession
  • Enter-PSSession
  • Invoke-Command

Ha a New-PSSession -Computername-t használja, akkor a WinRM protokollt fogja használni. Ha helyette a -hostname paramétert használja, akkor az SSH lesz használatban.

A következőképpen indíthat új PowerShell távkezelési munkamenetet:

# Directly open a remoting session
Enter-PSSession -HostName la-srv-lab01 -UserName admin

# Create a new session
$session = New-PSSession -HostName la-srv-lab01 -UserName admin

# Invoke a command on the remote machine
Invoke-Command -Session $session -ScriptBlock {Get-Process -Name "Explorer"}

# Result:
 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName   PSComputerName
 ------    -----      -----     ------      --  -- -----------   -------------
    517    49,78     122,99      24,83    3532   1 explorer      la-srv-lab01

Azt is vegye figyelembe, hogy a -Credentials helyett a -Username paramétert használjuk, mint a WinRM metódus esetében.

Távoli PowerShell-parancsokat futtathatunk az Invoke-Command parancsmaggal, vagy megnyithatjuk a PowerShell-t a szerveren az Enter-PSSession segítségével.

Több SSH-kapcsolat kezelése

Az olyan eszközök előnye, mint a Putty, hogy kezelheti és mentheti SSH-kapcsolatait. Ez lehetővé teszi, hogy könnyen újracsatlakozhasson a gyakran használt szerverekhez vagy hálózati eszközökhöz.

A Windows terminállal ugyanezt érheti el. Az új Windows Terminal lehetővé teszi a különböző kapcsolatok egyszerű tárolását és különböző parancssori felületek használatát.

Ha többet szeretne megtudni a Winows terminálról, feltétlenül olvassa el ezt a cikket, amelyben elmagyarázom ennek a nagy teljesítményű terminálnak az összes részletét.

Becsomagolás

Az SSH és a PowerShell használata igazán kényelmes, és nincs szükség extra eszközre (SSH-kliens). Személy szerint sokat használom a PowerShellt, így amikor ellenőriznem kell valamit vagy el kell végeznem valamit egy szerveren, rendkívül könnyen gyorsan csatlakozhatok hozzá a PowerShell ablakomból.

Remélem, hasznosnak találta ezt a cikket, ha bármilyen kérdése van, akkor csak írjon megjegyzést alább.

Kapcsolódó cikkek