Wie kann ich sowohl PowerShell Remoting als auch SPN für die SQL Server-Berichterstellung aktivieren?

1465
Carsten Hynne

Ich habe diese Frage bei Stack Exchange - Datenbankadministratoren ( https://dba.stackexchange.com/q/129286/51925 ) ausprobiert, aber ich erhalte keine Antworten, daher versuche ich es hier.

Ich habe Probleme mit Remoting-Servern mit SQL Server Reporting Services. Meine Reporting Services werden mit einzelnen Domänenkonten ausgeführt, und ich habe SPNs für sie eingerichtet ( HTTP/<Machine> <domain>\<user>). Soweit ich sehen kann, wird dadurch die Verwendung von PowerShell-Remoting effektiv deaktiviert, da der SPN, den WinRM verwenden soll, auf das von Reporting Services verwendete Domänenkonto verweist.

Ich habe kein Problem zB laufen Get-Service -ComputerName <Machine>, aber wenn ich es versuche Get-CimInstance Win32_Service -ComputerName <machine>oder Enter-PsSession <machine>erhalte ich einen Fehler ähnlich dem hier:

Get-CimInstance: WinRM kann die Anforderung nicht verarbeiten. Bei der Verwendung der Kerberos-Authentifizierung ist der folgende Fehler mit dem Fehlercode 0x80090322 aufgetreten: Ein unbekannter Sicherheitsfehler ist aufgetreten.
Mögliche Ursachen sind:
-Der angegebene Benutzername oder das angegebene Kennwort sind ungültig.
-Kerberos wird verwendet, wenn keine Authentifizierungsmethode und kein Benutzername angegeben sind.
-Kerberos akzeptiert Domänenbenutzernamen, jedoch keine lokalen Benutzernamen.
Der Service Principal Name (SPN) für den Namen und den Port des Remote-Computers ist nicht vorhanden.
-Die Client- und Remotecomputer befinden sich in unterschiedlichen Domänen, und es besteht keine Vertrauensbeziehung zwischen den beiden Domänen.
Nachdem Sie die oben genannten Probleme überprüft haben, versuchen Sie Folgendes: -
Überprüfen Sie die Ereignisanzeige auf Ereignisse im Zusammenhang mit der Authentifizierung.
- Ändern Sie die Authentifizierungsmethode. Fügen Sie den Zielcomputer der Konfigurationseinstellung "WinRM TrustedHosts" hinzu oder verwenden Sie den HTTPS-Transport.
Beachten Sie, dass Computer in der TrustedHosts-Liste möglicherweise nicht authentifiziert werden.
-Führen Sie für weitere Informationen zur WinRM-Konfiguration den folgenden Befehl aus: winrm help config. An Zeile: 1
Zeichen : 1 + Get-CimInstance win32_service -ComputerName <machine>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
Kategorie-Info: AuthenticationError: (root \ cimv2: win32_service: String) [Get-CimInstance], CimException
+ FullyQualifiedErrorId: HRESULT 0x8033809d, Microsoft.Management.Infrastructure .CimCmdlets.GetCimInstanceCommand
+ PSComputerName:<machine>

Wenn ich den SPN auf einem meiner Server lösche, kann ich nach einigen Sekunden (für AD-Replikation ein bisschen schnell?) Die oben genannten Befehle verwenden, aber wenn ich den SPN dann zurücksetze, fallen die Befehle nach einer Weile erneut aus.

Einige meiner Reporting Services müssen Anmeldeinformationen weiterleiten können, daher hoffe ich, dass mir jemand helfen kann, dieses Dilemma zu lösen.

Ein guter Tag für alle.

Hynne

1

2 Antworten auf die Frage

2
Carsten Hynne

Ich glaube, wir haben die Lösung gefunden. Um zu vermeiden, dass Reporting Services und WinRM um den HTTP-SPN kämpfen, können Sie einen portspezifischen SPN für WinRM wie folgt festlegen:

setspn -S HTTP/<Machine>:<port> <Machine>

Es ist eine gute Idee, SPNs für den Kurznamen und den FQDN zu erstellen.
Der Standardport ist 5985 für HTTP und 5986 für HTTPS. Ich glaube jedoch, dass er für die Verwendung verschiedener Ports eingerichtet werden kann.

Bei der Verwendung von WinRM habe ich eine Sitzung wie folgt eingerichtet:

$CimSessionOption = New-CimSessionOption -EncodePortInServicePrincipalName $CimSession = New-CimSession -Name ServiceSession -SessionOption $CimSessionOption -ComputerName <Machine> Get-CimInstance Win32_Service -CimSession $CimSession 

Haben Sie einen guten Tag

Hynne

1
MichelZ

Erstellen Sie neben der Antwort von @ carsten-hynne eine PowerShell-Sitzung mit dem von Ihnen verwendeten Port:

$option = New-PSSessionOption -IncludePortInSPN $pssession = New-PSSession -ComputerName MYMACHINE -SessionOption $option 

Hinweis: Stellen Sie sicher, dass Sie den PORT SPN aus der Antwort von @ carsten-hynne hinzugefügt haben!