Как включить удаленное взаимодействие PowerShell и SPN для отчетов SQL Server?

1302
Carsten Hynne

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

Я борюсь с удаленными серверами с помощью служб отчетов SQL Server. Мои службы отчетов работают с отдельными учетными записями домена, и я настроил имена участников-служб для них ( HTTP/<Machine> <domain>\<user>). Насколько я вижу, это фактически отключает использование удаленного взаимодействия PowerShell, поскольку имя участника-службы, которое WinRM должен использовать, указывает на учетную запись домена, используемую службами 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: ошибка аутентификации: (root \ cimv2: win32_service: String) [Get-CimInstance], CimException
+ FullyQualifiedErrorId: HRESULT 0x8033809d, Microsoft.Management.Infrastructure .CimCmdlets.GetCimInstanceCommand
+ PSComputerName:<machine>

Если я удаляю имя участника-службы на одном из моих серверов, то через несколько секунд (немного быстрее для репликации AD?) Я могу использовать приведенные выше команды, но если я затем сбрасываю имя участника-службы, через некоторое время команды снова перестают работать.

Некоторые из моих служб отчетов должны иметь возможность пересылать учетные данные, поэтому я надеюсь, что кто-то сможет помочь мне решить эту дилемму.

Добрый день всем.

Hynne

1

2 ответа на вопрос

2
Carsten Hynne

I believe we have found the solution. To avoid Reporting Services and WinRM fighting over the HTTP SPN, you can set a port-specific SPN for the WinRM like this:

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

It's a good idea to create SPNs for both short machine name and the FQDN.
The default port is 5985 for HTTP and 5986 for HTTPS, but I believe it can be set up to use different ports.

When using WinRM, I just set up a session like this:

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

Have a good day

Hynne

1
MichelZ

В дополнение к ответу @ carsten-hynne, чтобы создать сеанс PowerShell с использованием используемого порта:

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

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

Похожие вопросы