¿Qué es PS Remoting (PowerShell Remoting)?

 ¡Hola, bienvenidos a mi blog! Hoy les voy a hablar de como activar PS Remoting y los requisitos para asegurarnos de que funciona correctamente. También les voy a explicar cómo podemos usar PS Remoting en una red privada virtual (vpn).

PS Remoting (PowerShell Remoting) es una característica de PowerShell que nos permite ejecutar comandos o scripts en uno o varios equipos remotos. Es muy util para administrar sistemas, automatizar tareas o realizar diagnósticos. 


Requisitos que debes tomar en cuenta antes de utilizar PS Remoting


Para poder usar PS Remoting, necesitas cumplir los siguientes requisitos:

  • Tener instalado PowerShell en el equipo local y en el equipo remoto. La versión mínima recomendada es la 5.1, que viene incluida en Windows 10 y Windows Server 2016 o superior. Si tienes una versión anterior, puedes actualizarla desde el sitio web de Microsoft.

  • Tener habilitado el protocolo WinRM (Windows Remote Management) en el equipo local y en el remoto. WinRM es el protocolo que usa PowerShell Remoting para establecer las conexiones. En la sección Habilitando PS Remoting están los pasos para habilitar este protocolo.

  • Tener configurado el firewall de Windows para permitir el tráfico de WinRM. El comando anterior también se encarga de hacerlo, pero si tienes un firewall personalizado o de terceros, puede que tengas que abrir manualmente los puertos 5985 (HTTP) y 5986 (HTTPS).

  • Tener permisos suficientes para acceder al equipo remoto. Por defecto, solo los miembros del grupo Administradores locales pueden usar PS Remoting. Si quieres dar permisos a otros usuarios o grupos, puedes usar el cmdlet Set-PSSessionConfiguration con el parámetro -ShowSecurityDescriptorUI.

  • Tener configurada la autenticación y la cifrado adecuados. PS Remoting soporta varios mecanismos de autenticación y cifrado, pero los más comunes son:
    • Kerberos: Es el método predeterminado cuando los equipos están en el mismo dominio o bosque de Active Directory. Requiere que los nombres de los equipos sean resueltos correctamente por DNS.

    • Negotiate: Es el método predeterminado cuando los equipos no están en el mismo dominio o bosque. Requiere que se especifique un nombre de usuario y una contraseña válidos para el equipo remoto.

    • SSL: Es el método más seguro, ya que usa certificados digitales para autenticar y cifrar las conexiones. Requiere que se configure un certificado válido en el equipo remoto y que se especifique el parámetro -UseSSL al usar los cmdlets de PS Remoting.


Habilitando PS Remoting

Para habilitar PS Remoting, podemos usar el cmdlet Enable-PSRemoting, que se encarga de realizar todos los pasos necesarios. Solo tenemos que abrir una sesión de PowerShell como administrador y ejecutar el comando Enable-PSRemoting -Force.

 

enable psremoting


Este comando habilita el servicio WinRM (Windows Remote Management), crea un listener http en el puerto 5985, configura el firewall para permitir las conexiones de PowerShell y habilita la autenticación básica y la negociación. Si queremos usar https en lugar de http, podemos especificar el parámetro -usessl, pero necesitamos tener un certificado valido instalado en el equipo.


Una vez que hemos habilitado PS Remoting, podemos usar el cmdlet Enter-PSSession para iniciar una sesión interactiva con un equipo remoto. Por ejemplo, si queremos conectarnos al equipo con el nombre WN-DC01, podemos usar el comando Enter-PSSession -ComputerName WN-DC01. 

enter pssession

Este comando nos solicitara las credenciales del equipo remoto y nos mostrara un prompt con el nombre del equipo al que estamos conectados. Podemos ejecutar cualquier comando o script de PowerShell como si estuviéramos en el equipo remoto. Para salir de la sesión, podemos usar el cmdlet Exit-PSSession.

Si queremos ejecutar un comando o script en varios equipos remotos al mismo tiempo, podemos usar el cmdlet Invoke-Command. Por ejemplo, si queremos obtener la version de PowerShell de todos los equipos del dominio websternoble.com, podemos usar el siguiente comando:



Invoke-Command -ComputerName (Get-ADComputer -filter * ).Name -ScriptBlock {$psversiontable. Psversion}

invoke-command


Este comando usa el cmdlet Get-ADComputer para obtener los nombres de todos los equipos del dominio websternoble.com y los pasa como parámetro al cmdlet Invoke-Command. El parámetro -ScriptBlock especifica el bloque de código que queremos ejecutar en cada equipo remoto. En este caso, usamos la variable $psversiontable para obtener la version de PowerShell. El resultado se muestra en la consola local.



Utilizar PS Remoting a través de una red privada virtual (VPN)


Para usar PS Remoting en una red privada virtual (vpn), necesitamos tener configurada la vpn en ambos extremos de la conexión y asegurarnos de que los equipos remotos son accesibles por su nombre o dirección IP. También necesitamos tener habilitado PS Remoting en los equipos remotos y configurar el firewall para permitir las conexiones de PowerShell a través de la vpn. Si usamos https, necesitamos tener un certificado valido instalado en los equipos remotos.


Una vez que tenemos todo listo, podemos usar los mismos cmdlets que hemos visto antes para iniciar sesiones interactivas o ejecutar comandos o scripts en los equipos remotos a través de la vpn. Solo tenemos que especificar el nombre o la dirección IP del equipo remoto como parámetro del cmdlet Enter-PSSession o Invoke-Command.


Espero que les haya gustado este post sobre PS Remoting y que lo pongan en práctica. Si tienen alguna duda o comentario, pueden dejarlo abajo. Hasta la próxima.

Comentarios