Habilitar PSRemoting: Técnicas locales y remotas

Aunque en Windows, PSRemoting viene habilitado de forma predeterminada, no siempre está habilitado. Si necesitas comprobar si PSRemoting está habilitado o habilitarlo en Windows, este tutorial es para ti.

Este tutorial te guiará a través de diferentes formas de habilitar PSRemoting en computadoras locales y remotas que ejecuten Windows.

¡Empecemos!

Habilitar PSRemoting hace mucho

Si estás aprendiendo sobre PowerShell Remoting por primera vez, podrías pensar que habilitarlo es solo un comando único. Tal vez hayas visto referencias al cmdlet de PowerShell Enable-PSRemoting y pienses que una vez que lo ejecutas, simplemente cambia un bit en algún lugar. Estarías equivocado.

Cuando escuchas sobre habilitar PSRemoting, muchas tareas deben realizarse en segundo plano para que eso suceda. Dado que PowerShell Remoting depende de otros sistemas para funcionar correctamente, tiene algunas dependencias.

Por ejemplo, en Windows, cuando ejecutas el cmdlet Enable-PSRemoting sin parámetros, realiza todas las siguientes tareas:

  1. El servicio WinRM se inicia y se configura para iniciarse automáticamente.
  2. Crea un oyente en los puertos predeterminados de WinRM, 5985 para el tráfico HTTP.
  3. Habilita las excepciones del firewall para WS-Management.
  4. Registra las configuraciones de la sesión de PowerShell en WS-Management.
  5. Habilita las configuraciones de la sesión de PowerShell.
  6. Establece las sesiones remotas de PowerShell para permitir el acceso remoto.
  7. Reinicia el servidor WinRM para aplicar todos los cambios.

¿No estás contento de no tener que hacer todo esto manualmente? ¿Por qué mencionarlo si el cmdlet Enable-PSRemoting lo hace todo? Porque habrá momentos en los que algo no funcione y necesites solucionar lo que sucede.

Configuraciones predeterminadas de PSRemoting en Windows

Dado que PSRemoting nació en Windows, viene habilitado de forma predeterminada, pero no de manera universal y tampoco para todas las versiones de Windows.

En todos los sistemas operativos cliente de Windows, PSRemoting siempre está deshabilitado.

En Windows Server, PSRemoting está habilitado a veces, pero no siempre, dependiendo del perfil de red bajo el cual esté ejecutándose Windows. A continuación, encontrarás una tabla útil para ayudarte a determinar si tu sistema operativo Windows tiene PSRemoting habilitado o no.

Operating System Network Profile PSRemoting
Windows Server 2008 R2 Domain/Private Disabled
Windows Server 2008 R2 Public Disabled
Windows Server 2012 & Newer Domain/Private Enabled
Windows Server 2012 & Newer Public Enabled within the same subnet

En cambio, Linux es fácil. ¡PSRemoting ni siquiera es una opción! Ni siquiera PowerShell está instalado por defecto. Si deseas ejecutar PSRemoting en Linux, tendrás que configurarlo.

Basta de charlas, ¡vamos a mostrarte cómo empezar a usar PSRemoting de verdad!

Requisitos previos

Si planeas seguir los ejemplos de esta sección, asegúrate de tener lo siguiente:

  • A Windows Server 2008 R2 or later machine
  • A local or Active Directory domain user in the local administrators group

Habilitar PSRemoting localmente

Una de las formas más sencillas de habilitar PSRemoting es utilizar el comando integrado Enable-PSRemoting. Este comando, como aprendiste anteriormente, es un atajo para configurar muchos servicios diferentes para permitir el acceso remoto de PowerShell.

Usando el cmdlet Enable-PSRemoting

Cuando ejecutas este comando sin ningún parámetro, tomará diferentes acciones dependiendo del sistema operativo que estés utilizando. En cualquier sistema operativo Windows actual, se realizan los mismos pasos básicos. Se habilita PSRemoting, se crea el escucha HTTP de WinRM y se habilitan las reglas del firewall. La diferencia clave es la forma en que se manejan las redes públicas.

En un sistema operativo de servidor, como Windows Server 2019, la regla del firewall para redes públicas permite las conexiones remotas desde otros dispositivos en la misma red. En un sistema operativo de cliente, como Windows 10, recibirás un error indicando que estás en una red pública.

Si no estás seguro de bajo qué perfil de red está funcionando Windows, ejecuta el siguiente comando:

Get-NetConnectionProfile

Deberías usar PSRemoting solo en una red de confianza, ya que esencialmente está ejecutando un servidor web para escuchar conexiones remotas.

Get-NetConnectionProfile

Si estás de acuerdo con ejecutar PSRemoting en un perfil de red que no sea Privado o Doméstico, puedes omitir la comprobación del perfil de red utilizando el parámetro SkipNetworkProfileCheck. El uso de este parámetro abrirá los puertos de WinRM en el firewall de Windows.

Enable-PSRemoting -SkipNetworkProfileCheck

El uso del parámetro SkipNetworkProfileCheck abrirá el firewall de Windows para el acceso remoto de PowerShell en tu perfil de red actual, pero solo permitirá conexiones remotas desde máquinas en la misma subred.

Dos parámetros que se pueden utilizar con Enable-PSRemoting funcionan de manera conjunta. Son los parámetros -Force y -Confirm. Puedes usar -Force para omitir todas las indicaciones que normalmente te daría el comando Enable-PSRemoting. También puedes usar -Confirm:$false para obtener el mismo resultado.

Utilizando el comando winrm quickconfig

El comando winrm quickconfig solía ser una forma popular de configurar PSRemoting antes de que se creara el cmdlet Enable-PSRemoting, pero todavía tiene su lugar. Si ejecutas simplemente winrm quickconfig, habilitará el servicio WinRM, creará un escucha HTTP y habilitará las reglas del cortafuegos. Estas son todas cosas que ya se hacen con Enable-PSRemoting, pero esto no configura la máquina para poder manejar sesiones de PowerShell remotas.

Donde entran en juego los comandos winrm es en la configuración de escuchas HTTPS. Aunque puedes hacer esto manualmente, si tienes un certificado apropiado para el escucha HTTPS, simplemente puedes ejecutar winrm quickconfig -transport:https y se configurarán el escucha HTTPS y las reglas del cortafuegos de HTTPS.

Habilitando PSRemoting de forma remota

Hasta ahora, has aprendido que puedes habilitar PSRemoting ejecutando un comando en un equipo local. Esto nos lleva a un escenario de “huevo y gallina”. PSremoting te permite ejecutar comandos en equipos remotos, pero ¿cómo ejecutas un comando de forma remota sin PSRemoting?

Tres formas; la utilidad PSexec, WMI y Group Policy.

Usando Psexec

PSExec es una herramienta útil que te permite ejecutar comandos de forma remota, similar a lo que hace PSRemoting. Sin embargo, PSexec utiliza un método de comunicación diferente que puedes aprovechar!

Con PSexec, puedes ejecutar Enable-PSRemoting desde tu computadora local utilizando el siguiente comando. El comando a continuación llama a psexec y se conecta al servidor ServerB. Luego inicia un proceso de PowerShell y ejecuta el comando Enable-PSRemoting con el interruptor -Force para omitir las indicaciones habituales.

.\psexec.exe \ServerB -h -s powershell.exe Enable-PSRemoting -Force

Esta opción es útil para casos puntuales en los que necesitas habilitar PSRemoting en un sistema remoto, pero no es ideal si necesitas habilitar PSRemoting en muchos sistemas, ya que requiere descargar psexec.

Usando WMI

En ocasiones, PSexec puede no funcionar. Muchos programas de seguridad bloquean psexec, ¡pero no te preocupes, también tienes WMI!

Usando PowerShell y el cmdlet Invoke-CimMethod. Con el cmdlet Invoke-CimMethod, puedes indicarle a PowerShell que se conecte a la computadora remota a través de DCOM e invoque métodos.

Afortunadamente, WMI tiene una clase Win32_Process que te permite invocar procesos. Al invocar el método Create contra Win32_Process, Invoke-CimMethod se conecta a la computadora remota, invocando PowerShell y ejecutando Enable-PSRemoting como se muestra a continuación.

El siguiente ejemplo está creando una tabla hash para la conexión de sesión donde se especifican el nombre del servidor, las credenciales y el protocolo. Luego, en la tabla hash siguiente, se establecen los parámetros para el Invoke-CimMethod. Una vez que estos se ejecutan, se crea una sesión CIM sobre el protocolo DCOM que inicia un proceso de PowerShell que a su vez ejecuta el comando Enable-PSRemoting.

$SessionArgs = @{
     ComputerName  = 'ServerB'
     Credential    = Get-Credential
     SessionOption = New-CimSessionOption -Protocol Dcom
 }
 $MethodArgs = @{
     ClassName     = 'Win32_Process'
     MethodName    = 'Create'
     CimSession    = New-CimSession @SessionArgs
     Arguments     = @{
         CommandLine = "powershell Start-Process powershell -ArgumentList 'Enable-PSRemoting -Force'"
     }
 }
 Invoke-CimMethod @MethodArgs

En caso de que estés utilizando esto en un entorno de dominio, y el usuario que está ejecutando los comandos tenga derechos administrativos en el servidor de destino, la línea Credential = Get-Credential puede ser excluida.

Usando Directiva de Grupo

La última, y probablemente la mejor opción para habilitar WinRM en una amplia gama de computadoras es a través de directiva de grupo. Al usar la Directiva de Grupo, puedes crear un único Objeto de Directiva de Grupo y aplicar esa política a miles de computadoras a la vez.

Todas las computadoras deben estar en un dominio de Active Directory para usar la Directiva de Grupo.

Para usar la Directiva de Grupo para habilitar WinRM en muchas computadoras a la vez, vas a necesitar configurar tres elementos de configuración diferentes:

  1. Habilitar el servicio WinRM.
  2. Abrir el puerto del Firewall de Windows para WinRM.
  3. Crear el escucha de WinRM y permitir conexiones a él.

Primero, haga una conexión RDP a un controlador de dominio o, mejor aún, instale el paquete de herramientas de administración remota del servidor (RSAT) en una estación de trabajo unida al dominio. Ahora debería tener disponible la Consola de administración de directivas de grupo (GPMC).

Habilitar el servicio WinRM

Para habilitar el servicio WinRM en todos los equipos de destino:

  1. Abra el GPMC y crea una GPO. Mientras esté en la nueva GPO, navegue hasta Configuración del equipo —> Configuración de Windows —> Configuración de seguridad —> Servicios del sistema
  2. Seleccione Administración remota de Windows (WS-Management).
  3. En el panel de configuración, marque la casilla para Definir esta configuración de directiva.
  4. Seleccione el botón de opción Automático para establecer que el servicio WinRM inicie automáticamente al arrancar.
  5. Haga clic en Aceptar para confirmar la configuración.

Apertura del puerto del Firewall de Windows

A continuación, debe abrir el puerto WinRM en todos los equipos de destino. Mientras aún está editando la GPO creada anteriormente:

  1. Navegue hasta Configuración del equipo —> Configuración de Windows —> Configuración de seguridad —> Firewall de Windows Defender con seguridad avanzada.

2. Haz clic en Nueva regla de entrada para crear una nueva regla de entrada.

3. En la primera página selecciona Predefinido y elige Administración remota de Windows como se muestra a continuación.

Windows Remote Management

4. En la siguiente página, marca la casilla de la regla de Red de dominio/privada a menos que sepas que se utilizan redes públicas en tus entornos y necesites permitir conexiones remotas desde ellas.

Domain/Private network rule

5. En la siguiente página, deja el valor predeterminado de Permitir la conexión y haz clic en Finalizar para crear la regla.

Crea el Escucha WinRM y la Lista de Filtros

El último elemento de configuración para agregar a tu GPO es crear el escucha WinRM y permitir conexiones a ese escucha WinRM. Esta configuración crea el escucha WinRM para HTTP y permite conexiones desde las IP o rangos de IP especificados.

Mientras sigues editando el GPO de WinRM:

  1. Dirígete a Configuración del equipo —> Plantillas administrativas —> Componentes de Windows —> Administración remota de Windows (WinRM) —> Servicio WinRM.

2. Selecciona Habilitado para la configuración Permitir administración remota del servicio mediante WinRM.

3. Bajo la configuración de Permitir administración remota del servidor mediante WinRM, proporciona un asterisco (*) tanto para el Filtro IPv4 como para el Filtro IPv6 como se muestra a continuación.

Tenga en cuenta que puede especificar múltiples hosts separados por comas en cada lista de filtros si sabe de antemano qué hosts se conectarán a todas las computadoras de destino.

Allow remote server management through WinRM

4. Haga clic en Aceptar para confirmar el ajuste más reciente de la directiva de grupo (GPO).

Aplicando la GPO

En este momento, la GPO debería estar creada y lista para usarse. La tarea final que debe realizar ahora es aplicar esta GPO a todas las computadoras de destino en las que desee habilitar WinRM. No aprenderá cómo asignar una GPO a las computadoras de destino en este tutorial.

Si no sabe cómo asignar una GPO a un conjunto de computadoras en Active Directory, debería consultar este artículo.

Pasos siguientes

En este tutorial, ha aprendido cómo habilitar PSRemoting de muchas maneras diferentes. Cómo habilita PSRemoting dependerá en gran medida de su entorno y espero haber cubierto su escenario aquí.

Ahora, ¡tome lo que ha aprendido, salga y comience a usar PSRemoting en su entorno!

Source:
https://adamtheautomator.com/enable-psremoting/