PSRemoting (Parte 2): Cómo configurar PowerShell Remoting

Ahora que ya sabemos qué es y cómo funciona PowerShell Remoting gracias a la entrada anterior de la serie, estamos listos para empezar con la acción. En la entrada de hoy veremos cómo configurar PowerShell Remoting tanto en origen como en destino para empezar a ponernos en marcha.

Os dejo el índice de la serie:

Cómo configurar PowerShell Remoting

Configuraciones necesarias en la máquina destino

Si bien no es estrictamente necesario conocer el detalle de qué necesita tener configurado una máquina para poder conectarnos a ella mediante PowerShell Remoting, sí que es interesante conocer las distintas partes involucradas. Ésto va a sernos útil en el caso de que queramos hacer troubleshooting de una conexión y, en el caso de que queramos habilitar PowerShell Remoting mediante GPO, se va a volver imprescindible. Las configuraciones necesarias son las siguientes:

  • Configurar el servicio de escucha de WinRM.
  • Habilitar el servicio de WinRM para el autoarranque.
  • Crear una regla en el firewall local de la máquina para aceptar el tráfico entrante de WinRM.

Para nuestra suerte desde Windows Server 2012 estas tres configuraciones vienen habilitadas por defecto, por lo que en dichos sistemas (si no se ha deshabilitado después de la instalación alguno de estos puntos) no haría falta realizar ninguna configuración extra a no ser que intentemos conectar desde una subnet distinta a la de la máquina, puesto que la regla de Firewall por defecto no permite el tráfico desde subredes distintas en redes públicas.

Habilitar PowerShell Remoting en destino mediante Enable-PSRemoting

Sin duda a la hora de configurar PowerShell Remoting la opción más sencilla es utilizar Enable-PSRemoting siempre y cuando queramos habilitarlo en unas pocas máquinas, pues tendremos que ejecutar este cmdlet en cada una de ellas. Enable-PSRemoting se va a encargar de habilitar PowerShell Remoting sin más intervención por nuestra parte. Es importante remarcar también que no se requiere reinicio para aplicar los cambios.

Para usarlo abriremos una consola de PowerShell como administrador y ejecutaremos:

Enable-PSRemoting -Force

Ejecutamos el cmdlet con -Force para que no pida confirmaciones.

Una vez finalice la ejecución ya tendremos lista nuestra máquina.

Si estamos realizando esta operación en una máquina Windows cliente y no estamos en dominio es muy probable que nos encontremos con el siguiente error:

La excepción de firewall de WinRM no funcionará porque uno de los tipos de conexión de red de este equipo está establecido en Público. Cambie el tipo de conexión de red a Dominio o Privado e inténtelo de nuevo.

Para corregirlo deberíamos ejecutar Enable-PSRemoting con el parámetro SkipNetworkProfileCheck, con el que se crearía la regla igualmente pese a estar en una red pública:

Enable-PSRemoting -Force -SkipNetworkCheck

Por último, si quisiéramos acceder a nuestras máquinas (tanto Windows Server como cliente) desde una subnet distinta deberíamos modificar la regla de Firewall creada que por Enable-PSRemoting para que acepte peticiones desde cualquier dirección remota:

Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP" -RemoteAddress Any

Habilitar PowerShell Remoting en destino mediante GPO

Si bien configurar PowerShell Remoting mediante GPO es un poco más laborioso que hacerlo con Enable-PSRemoting, nos va a permitir hacerlo en gran cantidad de máquinas de una sola vez y asegurarnos de que nadie deshabilita PowerShell Remoting.

Para ello crearemos una nueva política de grupo en la que realizaremos las siguientes tres configuraciones.

Configurar el servicio de escucha de WinRM

Configuración del equipo > Directivas > Plantillas administrativas > Administración remota de Windows (WinRM) > Servicio WinRM > Permitir la administración de servidores remotos a través de WinRM

Habilitar WinRM GPO 1


Configurar autoarranque del servicio de WinRM

Configuración del equipo > Directivas > Configuración de Windows > Configuración de seguridad > Servicios del sistema > Administración remota de Windows (WS-Management)

Configurar el Firewall de Windows

Configuración del equipo > Configuración de Windows > Configuración de seguridad > Firewall de Windows con seguridad avanzada > Reglas de entrada

Aquí haremos clic derecho y pulsaremos en nueva regla.

Habilitar WinRM GPO 3
Habilitar WinRM GPO 4
Habilitar WinRM GPO 5

Si queremos permitir la conexión por PowerShell Remoting desde una subred distinta deberemos hacer botón derecho en la regla de perfil Público creada y en la pestaña Ámbito permitir cualquier dirección IP remota:

Habilitar WinRM GPO 6

Después de aplicar la GPO a las máquinas correspondientes ya deberíamos ser capaces de conectar mediante PowerShell Remoting.

Comprobar conectividad de PSRemoting

Una vez tenemos PowerShell Remoting en nuestra máquina destino deberemos probar que la conectividad funciona correctamente. Para ello nos valdremos del cmdlet Test-WSMan:

Uso de Test-WSMan

Si tras ejecutarlo nos devuelve una salida parecida a la siguiente sin errores quiere decir que hemos triunfado.

Configurar PowerShell Remoting en origen

Por último, si planeamos utilizar PowerShell Remoting en un entorno fuera de dominio de Active Directory deberemos realizar un pequeño cambio en nuestra máquina cliente (si vas a utilizar PowerShell Remoting en dominio puedes ignorar este paso).

Si intentamos una conexión remota sin hacer cambios en un entorno de dominio encontraremos el siguiente error:

El cliente WinRM no puede procesar la solicitud. Si el esquema de autenticación es distinto de Kerberos o si el equipo cliente no está unido a un dominio, se debe usar el transporte HTTPS o agregar el equipo de destino al valor de configuración TrustedHosts. Use winrm.cmd para configurar TrustedHosts. Tenga en cuenta que es posible que no se autentiquen los equipos de la lista TrustedHosts.

El error es muy autoexplicativo: por motivos de seguridad, si la autenticación no se realiza por Kerberos o si el equipo cliente no está unido a dominio tenemos que elegir una de las siguientes opciones para realizar la conexión:

  • Utilizar WS-Man sobre HTTPS.
  • Añadir el equipo destino a la configuración TrustedHosts.

Por el momento vamos a ver cómo modificar la configuración de TrustedHosts (PowerShell con permisos de administrador):

# Añadir una máquina de destino:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.253.10'
# Añadir múltiples máquinas destino:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '192.168.253.10,192.168.253.11'
# Añadir un wildcard para permitir todas las máquinas destino (inseguro)
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'

Después de esto ya deberíamos ser capaces de conectarnos a las máquinas destino que deseemos.

Cómo deshabilitar PowerShell Remoting

Por último, si queremos deshabilitar PowerShell Remoting disponemos de dos opciones:

  • Utilizar el cmdlet Disable-PSRemoting.
  • Crear una GPO que haga lo contrario de la que hemos visto en puntos anteriores.

Resumen

A modo de resumen, debido a que existen distintos escenarios a cubrir y puede parecer un poco lioso, estas son las acciones que hay que realizar según cada escenario posible:

  • Si vas a utilizar PSRemoting en dominio:
    • Servidores destino iguales o superiores a Windows 2012: No es necesario configurar nada.
    • Servidores destino anteriores a Windows 2012: Hay que habilitar PSRemoting con GPO o Enable-PSRemoting.
  • Si vas a utilizar PSRemoting fuera de dominio:
    • Máquinas en la misma subnet: Habilitar PSRemoting con GPO o Enable-PSRemoting y modificar TrustedHosts.
    • Máquinas en distinta subnet: Habilitar PSRemoting con GPO o Enable-PSRemoting, modificar TrustedHosts y modificar regla de Firewall.

Espero que os haya servido la entrada. En la próxima vamos a empezar a trastear con PowerShell Remoting y ver qué podemos hacer.

Deja un comentario