Windows: Powershell Remoting z uwierzytelnieniem HTTPS

24-kwi-2023

Powershell Remoting albo działa albo nie 🙂  Ewentualne problemy moga się wiązać z filtrowanym ruchem sieciowym ale też z samą konfiguracją usługi WinRM, bezpieczeństwem i uwierzytelnieniem. Jeśli komputery stoją w tej samej domenie, to wiele rzeczy będzie działać „od strzału” ale jeśli komputery nie są w domenie, to mogą być problemy. Dlatego zobaczmy, jak skonfigurować remoting między lokalnym komputerem, a maszyną wirtualną w Azure.

  1. Utwórz maszynę wirtualną z publicznym adresem IP. Załóżmy, że u mnie ten adres to: 20.168.197.227
  2. Upewnij się, że winrm działa. Domyślnie tak powinno być, ale lepiej się upewnić
    Get-Service winrm
  3. Wykonaj „szybką konfigurację” winrm. Domyślnie serwer będzie tylko skonfigurowany do HTTP, ale zaraz nad tym popracujemy
    winrm quickconfig
  4. System operacyjny musi pozwalać na ruch przychodzący dla sesji zdalnych, dlatego otwieramy porty:
    netsh advfirewall firewall add rule name=”WinRM-HTTP” dir=in localport=5985 protocol=TCP action=allownetsh advfirewall firewall add rule name=”WinRM-HTTPS” dir=in localport=5986 protocol=TCP action=allow

  5. Zauważ, że na tym etapie nasłuchujemy tylko na połączenia HTTP:
    winrm e winrm/config/listener
  6. Wprawdzie do pełnego uwierzytelnienia sesji potrzebny byłby pełnoprawny certyfikat, to jednak w uproszczonej sytuacji można bazować na self-signed certificate. Dlatego utwórzmy certyfikat:
    $cert = New-SelfSignedCertificate -DnsName “20.168.197.227” -CertStoreLocation cert:\LocalMachine\My
  7. Teraz można już skonfigurować listener HTTPS:
    winrm create winrm/config/Listener?Address=*+Transport=HTTPS „@{Hostname=`”20.168.197.227`”;CertificateThumbprint=`”$($cert.ThumbPrint)`”}”
  8. Teraz polecenie uruchamiane w kroku 5, zwróci już więcej informacji:
    winrm e winrm/config/listener
  9. Maszyna wirtualna w Azure, z pewnością korzysta jeszcze z ochrony Network Security Group. Tam również trzeba dodać wyjątki na akceptację połączeń na portach 5985 i 5986. Jak znaleźć NSG? Będzie prawdopodobnie przypisane do interfejsu sieciowego maszyny wirtualnej lub do podsieci, w której znajduje się komputer.
    Kliknij „Add inbound port rule” i zdefiniuj reguły pozwalające na połączenia skądkolwiek dokądkolwiek na portach 5985 i 5986:
  10. To koniec konfiguracji na maszynie zdalnej. Będąc za to na maszynie lokalnej, warto sprawdzić, czy komunikacja jest rzeczywiście otwarta. Reguły NSG potrzebują czasami trochę czasu do aktywacji:
    Test-NetConnection -ComputerName 20.168.197.227 -port 5985
    Test-NetConnection -ComputerName 20.168.197.227 -port 5986
  11. Ok, to pora na testowe połączenie. Można to zrobić tak:
    $options = New-PSSessionOption -SkipCACheck
    $credentials = Get-Credential
    cmdlet Get-Credential at command pipeline position 1
    Supply values for the following parameters:
    Credential
    $session = New-PSSession -ComputerName 20.168.197.227 -UseSSL -SessionOption $options -Credential $credentials
    Invoke-Command -Session $session { echo $env:COMPUTERNAME }
    remotesrv
    echo $env:COMPUTERNAME

    Tworzymy tu obiekt opcji, w którym deklarujemy się zaakceptować self-signed certificate, następnie pobieramy nazwę użytkownika i hasło, po czym można utworzyć obiekt sesji. Ten obiekt sam w sobie zawiera już połączenie do zdalnej maszyny. Dlatego w następnym kroku, można już uruchomić Invoke-Command do zdalnej maszyny i zapytać ją jak się nazywa. Tą nazwę można porównać z nazwą lokalnego komputera. Nazwy powinny się różnić:

Oryginalna instrukcja:

https://techdiksha.com/configuring-winrm-azure-virtual-machine/

 

 

 

 

Komentarze są wyłączone

Autor: Rafał Kraik