나는 Stack Exchange - Database Administrators(https://dba.stackexchange.com/q/129286/51925), 그런데 응답이 없어서 여기에서 시도해 보겠습니다.
SQL Server Reporting Services를 사용하여 서버를 원격으로 관리하는 데 어려움을 겪고 있습니다. 내 보고 서비스는 개별 도메인 계정으로 실행되고 있으며 해당 계정에 대한 SPN을 설정했습니다( HTTP/<Machine> <domain>\<user>
). 제가 아는 한, WinRM이 사용해야 하는 SPN이 Reporting Services에서 사용하는 도메인 계정을 가리키기 때문에 이는 PowerShell 원격 사용을 효과적으로 비활성화합니다.
예를 들어 실행하는 데 문제가 없지만 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을 추가했는지 확인하세요!