# PowerShell Remoting (WinRM): Enterprise-Skalierung & Security
TL;DR / Management Summary Während PSRemoting auf dem Client (Artikel 473) meist für Ad-hoc Support genutzt wird, ist es auf dem Server die primäre Management-Schnittstelle. Senior Admins nutzen
Invoke-Command, um identische Konfigurationen auf ganze Cluster auszurollen. Sicherheit wird durch Kerberos constrained delegation und den Verzicht auf Passwörter im Klartext erreicht. PSRemoting ist die Voraussetzung für moderne Infrastruktur-Automatisierung (IaC).
# 1. Einführung & Architektur
Die Multi-Server-Maschine.
WinRM ist der Microsoft-Standard für das Management von Hardware und Software über das Netzwerk. Es nutzt den WS-Management (WS-Man) Standard (SOAP over HTTP/HTTPS).
# Warum PSRemoting statt RDP?
- Performance: Objekte statt Pixel. Eine Session verbraucht ca. 20-50 MB RAM, ein RDP-Login 500 MB+.
- Skalierbarkeit: Sie können 100 Server gleichzeitig abfragen.
- Automatisierung: Ergebnisse kommen als durchsuchbare Objekte zurück, nicht als Text-Logs.
# 2. Server-spezifische Konfiguration
Härtung für das Datacenter.
# HTTPS erzwingen
In einer Enterprise-Umgebung (besonders bei Cross-Domain Zugriffen) ist ein SSL-Zertifikat für WinRM Pflicht.
# Listener auf Port 5986 mit Domain-Zertifikat erstellen
$Cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object { $_.Subject -like "*$env:COMPUTERNAME*" }
New-Item -Path WSMan:\Localhost\Listener -Transport HTTPS -Address * -CertificateThumbprint $Cert.Thumbprint
# Die TrustedHosts Falle
Vermeiden Sie Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'. Dies untergräbt das Kerberos-Vertrauensmodell. Nutzen Sie stattdessen Zertifikate oder DNS-Einträge.
# 3. Deep Dive: Kerberos Delegierung (Double-Hop)
Die Reise der Identität.
Das größte Problem in großen Umgebungen:
- Admin verbindet sich zu Server A.
- Script auf Server A soll Daten von Server B holen.
- Fehler: “Access Denied” auf Server B (Credential-Verlust).
# Die Lösung: Resource-Based Constrained Delegation (RBCD)
Dies erlaubt es einem Server, die Identität des Users gezielt an einen anderen Dienst weiterzugeben.
# Erlaubt ServerA die Identität des Users an den SMB-Dienst von ServerB weiterzugeben
$ServerA = Get-ADComputer -Identity "ServerA"
Set-ADComputer -Identity "ServerB" -PrincipalsAllowedToDelegateToAccount $ServerA
# 4. Day-2 Operations: Skalierung mit Fan-Out
1 zu n Verbindungen.
# Das Session-Management
Anstatt ständig neue Verbindungen aufzubauen, halten wir Sessions offen:
# Sessions vorbereiten
$ClusterNodes = "NODE01", "NODE02", "NODE03"
$Sessions = New-PSSession -ComputerName $ClusterNodes
# Befehl an alle schicken (Parallel!)
Invoke-Command -Session $Sessions -ScriptBlock { Get-Service VMMS }
# Sessions später schließen
Remove-PSSession $Sessions
# 5. Troubleshooting & “War Stories”
Wenn der Link bricht.
# Top 3 Fehlerbilder
-
Symptom: “WinRM cannot process the request. The server is not configured…”.
- Ursache: Der SPN (Service Principal Name) für WinRM fehlt im AD.
- Lösung:
setspn -s HTTP/ServerName ServerNameausführen.
-
Symptom: Massive Latenz bei
Enter-PSSession.- Ursache: DNS-Reverse Lookup Fehler am DC.
- Lösung: PTR-Zonen im DNS prüfen (Artikel 493).
-
Symptom: Out-of-Memory bei großen Skripten.
- Lösung:
MaxMemoryPerShellMBvia WinRM-Config erhöhen (Standard ist oft nur 256 MB).
- Lösung:
# “War Story”: Der “Auto-Admin” Loop
Ein Admin schrieb ein Skript, das via Invoke-Command auf 200 Servern den DNS-Dienst neustarten sollte.
Das Problem: Das Skript lief auf einem Domain Controller. Als der DNS-Dienst auf den DCs gestoppt wurde, konnte Invoke-Command die restlichen Namen nicht mehr auflösen. Das Skript verlor die Verbindung und hängte sich auf.
Lehre: Bei Änderungen an Kern-Infrastruktur (DNS, DHCP, IP) immer via IP-Adresse statt Hostname verbinden und Timeouts großzügig setzen.
# 6. Monitoring & Alerting
Remote-Management auditieren.
# PowerShell Script Block Logging
Aktivieren Sie via GPO das Script Block Logging (Event ID 4104). Es schreibt den exakten Code-Inhalt jedes ausgeführten Befehls ins Log. Unverzichtbar für die Forensik nach einem Einbruch.
# 7. Fazit & Empfehlung
PowerShell Remoting ist die Fernbedienung für das moderne RZ.
- Empfehlung: Nutzen Sie JEA (Just Enough Administration) (Artikel 521), um WinRM-Endpunkte für spezifische Rollen (z.B. Backup-Admins) abzusichern.
- Wichtig: Stellen Sie sicher, dass Port 5985/5986 nur in den internen Management-VLANs Ihres Proxmox-Clusters erreichbar ist.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Remoting aktivieren | Enable-PSRemoting -Force |
| Port prüfen | Test-NetConnection -ComputerName <Name> -Port 5985 |
| Interaktive Shell | Enter-PSSession -ComputerName <Name> |
| Skript-Datei fernstarten | Invoke-Command -ComputerName <Name> -FilePath "C:\script.ps1" |