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

Я пытался ответить на этот вопрос в 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?) Я могу использовать приведенные выше команды, но если я затем сбрасываю имя участника-службы, через некоторое время команды снова перестают работать.

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

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

Hynne

2 ответа

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

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

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

Я считаю, что мы нашли решение. Чтобы сервисы Reporting Services и WinRM не боролись за имя участника-службы HTTP, вы можете установить SPN для порта для WinRM следующим образом:

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

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

При использовании WinRM я просто настраиваю сеанс так:

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

Хорошего дня

Hynne

Другие вопросы по тегам