Jak wykonać polecenia w Powershell na zdalnej maszynie za pomocą PSRemoting

Przedstawię tutaj krótki opis co należy wykonać żeby z komputera z Windows 10 wykonać polecenia w Powershell na zdalnej maszynie z Windows 10.

Do czego służy zdalne wykonywanie poleceń Powershell Remoting z użyciem HTTPS?

Takie rozwiązanie możesz wykorzystać np. do:

  1. Administracji zdalnym systemem bez konieczności podłączania się poprzez RDP lub innym rozwiązaniem do administracji np. Teamviewer lub AnyDesk
  2. Zarządzania środowiskami testowymi kreowanymi poprzez Virtualbox i Vagrant o czym napisałem w tym wpisie

W moim przypadku mowa o punkcie drugim. Komputer na którym pracuje ma ograniczone zasoby, a ponieważ chce zachować wysoki komfort pracy zdecydowałem się na uruchomienie laboratorium na stacji roboczej Dell T5500.

Konfigurujemy zdalne uruchamianie poleceń za pomocą Powershell Remoting z użyciem HTTPS

Sesje PSRemoting z użyciem HTTPS zapewnią wysoki poziom bezpieczeństwa.

Poniższe kroki wykonaj na maszynie do której chcesz się podłączyć:

  1. Uruchom konsole PowerShell
tematyka.it konsola powershell

2. Wyświetl parametry sieci

Rozwiązanie PSRemoting będzie działać w momencie gdy sieć w której są Twoje komputery będzie w statusie „Private” lub „Domain”. Wyświetl dostępne połączenia sieciowe za pomocą polecenia:

Get-NetConnectionProfile
tematyka.it Get-NetConnectionProfile

W moim przypadku karta sieciowa Ethernet 2 służy wyłącznie do połączenia z drugą maszyną. W Twoim przypadku połączenie sieciowe może mieć inne parametry, w tym inny numer InterfaceIndex. Jeśli masz więcej niż jedną kartę sieciową, każda sieć musi pracować w trybie „Private” lub „Domain”.

3. Zmień parametry sieci

Zmień profil sieci za pomocą poniższego polecenia:

Set-NetConnectionProfile -InterfaceIndex 3 -NetworkCategory Private
Set-NetConnectionProfile -InterfaceIndex 7 -NetworkCategory Private
tematyka.it Set-NetConnectionProfile -InterfaceIndex 3 -NetworkCategory Private

4. Włączamy PSRemoting

Wykonaj poniższe polecenie:

Enable-PSRemoting -Force
tematyka.it Enable-PSRemoting -Force

5. Utwórz certyfikat SSL który posłuży do szyfrowania komunikacji

$hostName = $env:COMPUTERNAME
$hostIP=(Get-NetAdapter| Get-NetIPAddress).IPv4Address|Out-String
$srvCert = New-SelfSignedCertificate -DnsName $hostName,$hostIP -CertStoreLocation Cert:\LocalMachine\My
$srvCert
tematyka.it tworzenie certyfikatu SSL za pomocą komend w PowerShell

6. Usuń standardową konfigurację odnośnie standardowych portów HTTP 5985 i HTTPS 5986

Get-ChildItem wsman:\localhost\Listener
Get-ChildItem wsman:\localhost\Listener\ | Where-Object -Property Keys -like 'Transport=HTTP*' | Remove-Item -Recurse
tematyka.it usunięcie konfiguracji dla HTTP 5985 i HTTPS 5986

tematyka.it WINRM nasłuchującą na porcie 5986

7. Utwórz nową konfigurację WINRM nasłuchującą na porcie 5986

New-Item -Path WSMan:\localhost\Listener\ -Transport HTTPS -Address * -CertificateThumbPrint $srvCert.Thumbprint -Force
tematyka.it WINRM nasłuchującą na porcie 5986

8. Zmodyfikuj lokalny firewall żeby przyjmował ruch na porcie 5986

New-NetFirewallRule -Displayname 'WinRM - Polaczenie przychodzace tematyka.it' -Name 'WinRM - Polaczenie przychodzace tematyka.it' -Profile Any -LocalPort 5986 -Protocol TCP
tematyka.it odblokowanie portu 5986

9. Wykonaj restart usługi WinRM

Restart-Service WinRM

10. Wykonaj eksport certyfikatu SSL

Pamiętaj o tym żeby kod dostosować do swoich potrzeb i zmienić ścieżkę w jakiej certyfikat ma zostać zapisany.

Export-Certificate -Cert $srvCert -FilePath C:\Users\tematyka.it\Desktop\SSL_PS_Remoting_tematyka_it.cer
tematyka.it eksport certyfikaty SSL z konsoli PowerShell

11. Zaimportuj certyfikat SSL na maszynie z której będziesz się łączyć do maszyny zdalnej

Przekopiuj certyfikat do maszyny z której będziesz wykonywać polecenia, pamiętaj żeby odpowiednio zmodyfikować plecenie i zmienić lokalizację certyfikatu.


Import-Certificate -FilePath 'C:\Users\tematyka.it\Desktop\SSL_PS_Remoting_tematyka_it.cer' -CertStoreLocation Cert:\LocalMachine\root\

tematyka.it import certyfikatu SSL z konsoli PowerShell

12. Wykonaj połączenie

tematyka.it   PSRemoting połączenie do hosta zdalnego.

Podsumowanie

Poniższe rozwiązanie sprawdzi się jeśli chcesz wykonać czynności na systemie zdalnym bez konieczności dostępu poprzez zdalny pulpit. Ja używam Visual Studio Code wraz z pluginem Powershell, dzięki temu wszystko wykonuje z jednej konsoli.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *