Я попробовал задать этот вопрос на 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!