如何为 SQL Server Reporting 启用 PowerShell Remoting 和 SPN?

如何为 SQL Server Reporting 启用 PowerShell Remoting 和 SPN?

我曾在 Stack Exchange - 数据库管理员 ( 上尝试过这个问题https://dba.stackexchange.com/q/129286/51925),但我没有收到任何回复,所以我会在这里尝试。

我正在努力使用 SQL Server Reporting Services 远程处理服务器。我的 Reporting Services 使用单独的域帐户运行,并且我已为它们设置了 SPN ( HTTP/<Machine> <domain>\<user>)。据我所知,这实际上禁用了使用 PowerShell 远程处理,因为 WinRM 应该使用的 SPN 指向 Reporting Services 使用的域帐户。

我运行例如没有问题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。在第 1 行,字符: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,则一段时间后命令会再次失败。

我的一些报告服务需要能够转发凭据,所以我希望有人能够帮助我解决这个难题。

祝大家有个美好的一天。

海恩

答案1

我相信我们已经找到了解决方案。为了避免 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

祝你有美好的一天

海恩

答案2

除了 @carsten-hynne 的回答之外,要使用您使用的端口创建 PowerShell 会话:

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

注意:确保您已添加@carsten-hynne 的答案中的 PORT SPN!

相关内容