Как включить PowerShell Remoting и SPN для отчетов SQL Server?

Как включить PowerShell Remoting и SPN для отчетов SQL Server?

Я попробовал задать этот вопрос на Stack Exchange - Администраторы баз данных (https://dba.stackexchange.com/q/129286/51925), но я не получаю никаких ответов, поэтому попробую здесь.

Я борюсь с удаленным взаимодействием серверов с SQL Server Reporting Services. Мои Reporting Services работают с отдельными учетными записями домена, и я настроил для них SPN ( HTTP/<Machine> <domain>\<user>). Насколько я могу судить, это фактически отключает использование удаленного взаимодействия PowerShell, поскольку SPN, которое должен использовать WinRM, указывает на учетную запись домена, используемую 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. В строке: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, вы можете задать SPN для конкретного порта для WinRM следующим образом:

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

Хорошей идеей будет создать SPN как для короткого имени машины, так и для FQDN.
Порт по умолчанию — 5985 для HTTP и 5986 для HTTPS, но я считаю, что можно настроить использование других портов.

При использовании 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

Примечание: убедитесь, что вы добавили PORT SPN из ответа @carsten-hynne!

Связанный контент