PowerShell

Remoting

Leerdoelen

  • Het remote uitvoeren van PowerShell cmdlets

PowerShell Remoting

  • Connecten aan een remote machine(s)
  • Kan 1 of meerdere (25000) machines zijn
  • Waarop je tegelijktijd hetzelfde commando kan uitvoeren
  • De tool voor beheer van meerdere servers
  • Gebruikt WS-MAN protocol

Hoe remoting werkt

  • Start een PowerShell sessie (1) op je computer
  • Connect met een PowerShell sessie (2) op een remote systeem
  • Cmdlets worden uitgevoerd op de remote computer (2)
  • De uitvoer van het commando wordt terug gestuurd naar de verzender (1)

Een verbinding maken

Windows Remote Management

  • Om een verbinding te maken moet er iets luisteren
  • We hebben een service nodig die connecties kan aannemen
  • WinRM is zo'n service
    • Gebruikt het WS-Management Protocol (WS-MAN)
    • Een veilige en betrouwbare methode voor het beheer van computers
    • Maakt gebruik van HTTP(s)

Wat is er nodig

  • Minimaal 2 machines met PowerShell
  • Minimaal 1 machine die toegang geeft tot remoting
    • Service die remote connecties toestaat
    • Firewall die verbindingen doorlaat

Test setup: Clonen van een VM

  • Clone Windows 11 Pro VM
  • Regenerate het MAC-adres
    • VMWare: Settings → Network Adapter
    • Klik op Advanced
    • Bij MAC-address klik op Generate
    • Noteer de MAC-adressen
  • Start Windows:
    • Ga naar Settings → System
    • Bij systeem naam klik op Rename
    • Je systeem moet herstarten...

Test setup: Add Interface(s)

  • VMWare: Voeg aan beide windows systemen een netwerkkaart toe
    • Settings
    • Klik: + Add
    • Select: Network Adapter
    • Klik: Finish
    • Select: LAN Segment
    • Klik: Save
    • Noteer de MAC-adressen

Client en Server

  • We hebben 2 machines
  • Van de ene maken we een server
    • Is degene die de commando's gaat ontvangen
  • Van de andere maken we de client
    • Is degene waarop wij werken

Test setup: Private network

  • De nieuwe adapters vormen een "eigen" netwerk
  • Het netwerk wordt het 192.168.242.0/24 netwerk
  • Zet op de client het IP op de nieuwe adapter:
Set-NetIPAddress -InterfaceAlias "Ethernet1" 
	-IPAddress 192.168.242.1 -PrefixLength 24

  • Zet op de server het IP op de nieuwe adapter:
Set-NetIPAddress -InterfaceAlias "Ethernet1" 
	-IPAddress 192.168.242.2 -PrefixLength 24

  • Vertel beide machines dat dit een private network is:
  • Set-NetConnectionProfile -InterfaceAlias "Ethernet1" \
    	-NetworkCategory Private

Test setup: testing

  • Kan je 2 kanten op pingen?
  • Niet:
    • Controleer MAC-adressen en IP adressen
    • Controleer de firewall
    • Zet de firewall uit en test
    • Allow ping door de firewall voor hele subnet:
Set-NetFirewallRule -Name 'CoreNet-Diag-ICMP4-EchoRequest-In' \
	-enabled True -RemoteAddress 192.168.242.0/24

Enable remoting on server

Enable-PSRemoting
Set-WSManQuickConfig
  • Wie heeft er toegang tot remoting?
    • Vervang <computer...> door je client
Set-Item -Path WSMan:\localhost\Client\TrustedHosts \
	-Value "<computer1>,<computer2>"

Test server configuration

winrm enumerate winrm/config/listener
Listener
    Address = *
    Transport = HTTP
    Port = 5985
    Hostname
    Enabled = true
    URLPrefix = wsman
    CertificateThumbprint
    ListeningOn = 127.0.0.1, 192.168.185.136, 192.168.242.2,\
	::1, fe80::6f58:7b93:f93a:2e64%11,\
	fe80::9f6f:45e4:714f:2b7f%3
			

Config remoting op de client

winrm quickconfig
  • Wie mag er data terug sturen?
    • Vervang <computer...> door je server
Set-Item -Path WSMan:\localhost\Client\TrustedHosts \
	-Value "<computer1>,<computer2>"
Get-Item WSMan:\localhost\Client\TrustedHosts

Test de verbinding

  • Vanaf de client connect naar de server
Test-WsMan -ComputerName <IP server>
wsmid           : http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
ProductVendor   : Microsoft Corporation
ProductVersion  : OS: 10.0.26200 SP: 0.0 Stack: 3.0

Domain of geen domain

  • Normaal doe je dit in een domain
    • Accounts beschikbaar op alle machines
    • Machines zijn getrust in het domain
  • Maar het kan ook zonder...
    • ... was wel rocket science...

Server: Allow HTTP en Basic auth

cd WSMan:\localhost\Service
dir
Set-Item .\allowunencrypted $true
cd Auth
dir
Set-Item .\Basic $true

Client: Allow HTTP en Basic auth

cd WSMan:\localhost\Client
dir
Set-Item .\allowunencrypted $true
cd Auth
dir
Set-Item .\Basic $true

Test login

Test-WsMan -ComputerName win11rem01 -Authentication basic \
	-credential dleeu

Test remote command

Invoke-Command -Authentication basic -ComputerName win11rem01 \
	-ScriptBlock { Get-ChildItem C:\ } -credential dleeu

Start een remote sessie

Enter-PSSession -ComputerName win11rem01 \
		-Authentication basic -Credential dleeu

Single Sign-On

$Cred = Get-Credential
Enter-PSSession -ComputerName win11rem01 \
                -Authentication basic -Credential $Cred

Naar meerdere machines

Enter-PSSession -ComputerName rem01, rem02, rem03, rem04 \
		-Authentication basic -Credential dleeu {
    Get-Service -Name W32time
	  }
  • Account en password moet op elke machine hetzelfde zijn
  • Alleen handig in een domain

Samenvatting

  • We hebben Remote Management geconfigureerd
  • We hebben via een prive-netwerk gewerkt
  • We hebben gewerkt met een onveilige verbinding
  • We hebben gewerkt met een basic authenticatie