Probé esta pregunta en Stack Exchange - Administradores de bases de datos (https://dba.stackexchange.com/q/129286/51925), pero no obtengo ninguna respuesta, así que lo intentaré aquí.
Estoy luchando con servidores remotos con SQL Server Reporting Services. Mis Reporting Services se ejecutan con cuentas de dominio individuales y he configurado SPN para ellas ( HTTP/<Machine> <domain>\<user>
). Por lo que puedo ver, esto deshabilita efectivamente el uso de la comunicación remota de PowerShell, ya que el SPN que debería usar WinRM apunta a la cuenta de dominio utilizada por Reporting Services.
No tengo ningún problema al ejecutar eg Get-Service -ComputerName <Machine>
, pero si lo intento Get-CimInstance Win32_Service -ComputerName <machine>
me Enter-PsSession <machine>
sale un error similar a este:
Get-CimInstance: WinRM no puede procesar la solicitud. Se produjo el siguiente error con el código de error 0x80090322 al utilizar la autenticación Kerberos: Se produjo un error de seguridad desconocido.
Las posibles causas son:
-El nombre de usuario o la contraseña especificados no son válidos.
-Kerberos se utiliza cuando no se especifica ningún método de autenticación ni nombre de usuario.
-Kerberos acepta nombres de usuarios de dominio, pero no nombres de usuarios locales.
-El nombre principal del servicio (SPN) para el nombre y el puerto de la computadora remota no existe.
-El cliente y las computadoras remotas están en dominios diferentes y no hay confianza entre los dos dominios.
Después de comprobar los problemas anteriores, intente lo siguiente:
-Compruebe el Visor de eventos para ver si hay eventos relacionados con la autenticación.
-Cambiar el método de autenticación; agregue la computadora de destino a la configuración de WinRM TrustedHosts o use el transporte HTTPS.
Tenga en cuenta que es posible que las computadoras en la lista TrustedHosts no estén autenticadas.
-Para obtener más información sobre la configuración de WinRM, ejecute el siguiente comando: winrm help config. En la línea:1 char: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>
Si elimino el SPN en uno de mis servidores, después de unos segundos (¿un poco rápido para la replicación de AD?) puedo usar los comandos anteriores, pero si luego reinicio el SPN, los comandos fallan nuevamente después de un tiempo.
Algunos de mis servicios de informes deben poder enviar credenciales, por lo que espero que alguien pueda ayudarme a resolver este dilema.
Un buen día para todos.
Hynne
Respuesta1
Creo que hemos encontrado la solución. Para evitar que Reporting Services y WinRM peleen por el SPN HTTP, puede configurar un SPN específico de puerto para WinRM de esta manera:
setspn -S HTTP/<Machine>:<port> <Machine>
Es una buena idea crear SPN tanto para el nombre corto de la máquina como para el FQDN.
El puerto predeterminado es 5985 para HTTP y 5986 para HTTPS, pero creo que se puede configurar para usar diferentes puertos.
Cuando uso WinRM, simplemente configuro una sesión como esta:
$CimSessionOption = New-CimSessionOption -EncodePortInServicePrincipalName
$CimSession = New-CimSession -Name ServiceSession -SessionOption $CimSessionOption -ComputerName <Machine>
Get-CimInstance Win32_Service -CimSession $CimSession
Que tenga un buen día
Hynne
Respuesta2
Además de la respuesta de @carsten-hynne, para crear una sesión de PowerShell utilizando el puerto que utiliza:
$option = New-PSSessionOption -IncludePortInSPN
$pssession = New-PSSession -ComputerName MYMACHINE -SessionOption $option
Nota: ¡Asegúrese de haber agregado el PORT SPN de la respuesta de @ carsten-hynne!