WinRM (Windows Remote Management) ist ein einfaches in Windows integriertes Remote-Verwaltungsprotokoll. WinRM nutzt das SOAP (Simple Object Access Protokoll), um Verbindungen zu entfernten Computern und Anwendungen aufzubauen.
WinRM wird über die Kommandozeile gesteuert und für folgende Aufgaben eingesetzt.
Remote-Kommunikation zu allen kompatiblen Betriebssystemen Ausführung von Befehlen auf Computern die nur remote erreichbar sind also über das Netzwerk Überwachen, verwalten und konfigurieren von Computern sei es ein Server oder eine Workstation
WinRM muss ab Windows 10 explizit aktiviert und konfiguriert werden. Das ist nicht immer so einfach. Es hängt stark von der Umgebungssicherheit ab. Sprich, nutzt man WinRM in einer Domäne oder in einem lokalen Netzwerk. Setzt man Zertifikate ein oder doch nur bestimmte Authentifizierungsmechanismen.
WinRM ist nicht allein. Es gibt noch die WinRS (Windows Remote Shell). WinRS ist quasi die Clientkomponente auf einem System, das die Befehle ausführt, also die eigentliche Funktionalität zum Ausführen von Befehlen und Prozessen bereitstellt.
Windows Remote Management setzt bei der Kommunikation auf die Ports 5985 und 5986. Wobei der letzte Port (HTTPS) einsetzt. Früher wurden die Ports 80 und 443 für diese Aufgabe eingesetzt. Aber dadurch das der Port 80 überwiegend, aus Sicherheitsgründen gesperrt wurde, setzt man heute auf die neuen Ports.
# Show config winrm get winrm/config winrm get winrm/config/client winrm get winrm/config/service # Aktivieren winrm quickconfig # Ports öffnen (optional) Enable-PSRemoting -Force New-NetFirewallRule -Name "WinRM-HTTP" -DisplayName "WinRM (HTTP)" -Enabled True -Profile Any -Action Allow -Protocol TCP -LocalPort 5985 # Lokalen User in Gruppe geben Add-LocalGroupMember -Group "Remote Management Users" -Member <username> # Bei Domänen User winrm set winrm/config/service/Auth @{Basic="true"} # Dann Zugriff via IP begrenzen Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Service" -Name "IPv4Filter" -Value "*,1.1.1.1,2.2.2.2/24" Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\Service" -Name "IPv6Filter" -Value "*" # Listener einstellen winrm enumerate winrm/config/listener # Dienst starten/stoppen Start-Service -Name WinRM Stop-Service -Name WinRM Get-Service WinRM # Dienst automatisch starten Set-Service -Name WinRM -StartupType Automatic # Trusted Hosts einstellen Set-Item WSMan:\localhost\Client\TrustedHosts -Value "server1,server2" Set-Item WSMan:\localhost\Client\TrustedHosts -Value "*" # Never! Get-Item WSMan:\localhost\Client\TrustedHosts # Reset config winrm invoke restore winrm/config
write-output "Running User Data Script" write-host "(host) Running User Data Script" Set-ExecutionPolicy Unrestricted -Scope LocalMachine -Force -ErrorAction Ignore # Don't set this before Set-ExecutionPolicy as it throws an error $ErrorActionPreference = "stop" # Remove HTTP listener Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse # WinRM write-output "Setting up WinRM" write-host "(host) setting up WinRM" cmd.exe /c winrm quickconfig -q cmd.exe /c winrm quickconfig '-transport:http' cmd.exe /c winrm set "winrm/config" '@{MaxTimeoutms="1800000"}' cmd.exe /c winrm set "winrm/config/winrs" '@{MaxMemoryPerShellMB="1024"}' cmd.exe /c winrm set "winrm/config/service" '@{AllowUnencrypted="true"}' cmd.exe /c winrm set "winrm/config/client" '@{AllowUnencrypted="true"}' cmd.exe /c winrm set "winrm/config/service/auth" '@{Basic="true"}' cmd.exe /c winrm set "winrm/config/client/auth" '@{Basic="true"}' cmd.exe /c winrm set "winrm/config/service/auth" '@{CredSSP="true"}' cmd.exe /c winrm set "winrm/config/listener?Address=*+Transport=HTTP" '@{Port="5985"}' cmd.exe /c netsh advfirewall firewall set rule group="remote administration" new enable=yes cmd.exe /c netsh advfirewall firewall add rule name="Open Port 5985" dir=in action=allow protocol=TCP localport=5985 cmd.exe /c net stop winrm cmd.exe /c sc config winrm start= auto cmd.exe /c net start winrm