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:
- Administracji zdalnym systemem bez konieczności podłączania się poprzez RDP lub innym rozwiązaniem do administracji np. Teamviewer lub AnyDesk
- 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ć:
- Uruchom konsole 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
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
4. Włączamy PSRemoting
Wykonaj poniższe polecenie:
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
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
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
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
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
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\
12. Wykonaj połączenie
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.