Sql-Server

如何為 SQL Server 報告啟用 PowerShell 遠端處理和 SPN?

  • February 27, 2020

我正在努力處理執行 SQL Server Reporting Services 的遠端伺服器。我的 Reporting Services 使用單獨的域帳戶執行,並且我已經為它們設置了 SPN ( HTTP/<Machine> <domain>\<user>)。據我所知,這有效地禁用了使用 PowerShell 遠端處理,因為 WinRM 應該使用的 SPN 指向 Reporting Services 使用的域帳戶。

我執行 eg 沒有問題Get-Service -ComputerName <Machine>,但是如果我嘗試Get-CimInstance Win32_Service -ComputerName <machine>或者Enter-PsSession <machine>我收到類似於此的錯誤:

Get-CimInstance:WinRM 無法處理該請求。使用 Kerberos 身份驗證時出現以下錯誤,錯誤程式碼為 0x80090322:發生未知安全錯誤。可能的原因有:

  • 指定的使用者名或密碼無效。

-Kerberos 在沒有指定身份驗證方法和使用者名時使用。

-Kerberos 接受域使用者名,但不接受本地使用者名。

  • 遠端電腦名稱和埠的服務主體名稱 (SPN) 不存在。

-客戶端和遠端電腦在不同的域中,兩個域之間沒有信任。

檢查上述問題後,請嘗試以下操作: -

檢查事件查看器中與身份驗證相關的事件。

-改變認證方式;將目標電腦添加到 WinRM TrustedHosts 配置設置或使用 HTTPS 傳輸。

請注意,TrustedHosts 列表中的電腦可能未經過身份驗證。

  • 有關 WinRM 配置的更多資訊,請執行以下命令:winrm help config。在 line:1 char:1 + Get-CimInstance win32_service -ComputerName <machine> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ + CategoryInfo: AuthenticationError: (root\cimv2:win32_service:String)

$$ Get-CimInstance $$,CimException + FullyQualifiedErrorId:HRESULT 0x8033809d,Microsoft.Management.Infrastructure.CimCmdlets.GetCimInstanceCommand + PSComputerName:<machine>

如果我在其中一台伺服器上刪除 SPN,幾秒鐘後(AD 複製有點快?)我可以使用上述命令,但如果我隨後重置 SPN,命令會在一段時間後再次失敗。

我的一些 Reporting Services 需要能夠轉發憑據,所以我希望有人能夠幫助我解決這個難題。

我相信我們已經找到了解決方案。為避免 Reporting Services 和 WinRM 爭奪 HTTP SPN,您可以為 WinRM 設置特定於埠的 SPN,如下所示:

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

為短機器名稱和 FQDN 創建 SPN 是個好主意。

HTTP 的預設埠是 5985,HTTPS 的預設埠是 5986,但我相信它可以設置為使用不同的埠。

使用 WinRM 時,我只是設置了一個這樣的會話:

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

除了@carsten-hynne 回答,要使用您使用的埠創建 PowerShell 會話:

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

注意:確保您已從@carsten-hynne 的回答中添加了 PORT SPN!

引用自:https://dba.stackexchange.com/questions/129286