ONU

U06 Windows WinRM

📙Descargar PDF

ÍNDICE

INTRODUCCIÓN

WinRM es una implementación de Microsoft del protocolo WS-Management (Web Service for Management), un protocolo estándar que permite la interoperabilidad entre hardware y sistemas operativos de diferentes proveedores. WinRM puede ejecutar órdenes de administración remota en equipos Windows mediante la consola WinRS o estableciendo una conexión remota a través de PowerShell.

Utiliza los siguientes puertos:

Equipo Puerto
Servidor 5985 TCP para HTTP
Servidor 5986 TCP para HTTPS
Cliente Puerto efímero TCP

SERVIDOR WINRM

Instalación

No es necesario instalar WinRM, ya que viene preinstalado en todas las versiones actuales de Windows.
Sin embargo, se puede configurar rápidamente el servicio con el siguiente comando:

C:\> winrm quickconfig -f

Con esta orden lleva a cabo las siguientes acciones:

Habilitar y deshabilitar el servicio

Programas

Comando Descripción
winrm Utilidad para configurar y consultar el estado de WinRM.
winrm -? Muestra la ayuda con todas sus opciones.

CLIENTE WINRM

Instalación ​

No es necesario instalar WinRM, ya que viene preinstalado en todas las versiones actuales de Windows. Aunque no es necesaria la instalación, debemos iniciar el servicio WinRM, ya que a veces no está activo.

PS C:\> Start-Service -name "winrm"
PS C:\> Set-Service -name "winrm" -StartupType Automatic

A continuación, antes de realizar cualquier conexión con un servidor, debemos agregar el servidor a los hosts de confianza (TrustedHosts) y comprobar la conectividad con el servidor.

PS C:\> Set-Item WSMan:\localhost\Client\TrustedHosts <ipservidor>
PS C:\> Test-WSMan -ComputerName <ipservidor>

Programas ​

Programa Descripción
winrs Utilidad de Windows para ejecutar una consola remota con WinRM.
PowerShell Objeto PSSession, este objeto nos permite realizar conexiones tanto interactivas como no interactivas con una máquina remota mediante WinRM.

Winrs

El modo de uso de esta consola es:

winrs [-opción:valor] comando

Entre otras opciones, tenemos:

Opción Descripción
-remote IP|nombre Nombre o IP de la máquina remota.
-username usuario Usuario para conectarse a la máquina remota.
-password clave Clave del usuario para conectarse a la máquina remota.

Para ejecutar un comando remotamente, se utiliza la siguiente sintaxis:

C:\> winrs -remote:<ip> -username:<usuario> -password:<clave> <comando>

Para cerrar la sesión se utiliza el comando exit o CTRL+C.

Conexión winrs

Con winrs, conectamos con el equipo remoto 192.168.100.150 con el usuario admin y la contraseña clave para ejecutar el comando cmd (consola).

C:\> winrs -remote:192.168.1.150 -username:admin -password:clave cmd.exe

Para salir de la sesión utilizamos el comando exit.

C:\> exit

Powershell: objeto PSSesion

Con el objeto PSSession, podemos establecer conexiones interactivas y no interactivas con un servidor.

Conexiones interactivas

Para abrir o crear una sesión interactiva podemos proceder de dos formas diferentes:

Para desconectarse de la sesión interactiva, se utiliza el siguiente comando:

[Servidor]: PS C:\> Exit-PSSession

En este caso, el comando no solo cierra la sesión, sino que también la elimina del sistema.

Conexión WinRM interactiva

Conectar con el usuario admin al servidor WinRM de ip 192.168.1.150. A continuación cerrar la sesión.

PS C:\> Enter-PSSession -ComputerName 192.168.1.150 -Credential admin
[192.168.1.150]: PS C:\> Exit-PSSession
PS C:\>
Conexiones no interactivas

Para crear una conexión no interactiva, creamos una variable de tipo sesión (PSSession):

PS C:\> $rs = New-PSSession -ComputerName <ip> -Credential <usuario>

Al igual que con Enter-PSSession, también se puede construir un objeto Credential para evitar pasar el usuario y la contraseña directamente.

Con una conexión no interactiva, podemos realizar diversas acciones. Así si en la variable $rs tenemos una sesión podemos:

Conexión WinRM no interactiva

Crear un objeto Credential para el usuario admin con la contraseña P@ssw0rd, establecer una conexión no interactiva utilizando dicha credencial y, finalmente, cerrar la sesión.

PS C:\> $pwd = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
PS C:\> $crd = New-Object System.Management.Automation.PSCredential ("admin", $pwd)
PS C:\> $rs = New-PSSession -ComputerName 192.168.1.150 -Credential $crd

Otra ventaja de utilizar conexiones no interactivas es que se pueden usar en scripts y también copiar ficheros entre el servidor y el cliente.

Copia de ficheros

Copiar el fichero c:\doc\hola.txt a la carpeta c:\tmp del servidor.

PS C:\> Copy-Item "c:\doc\hola.txt" -ToSession $rs -Destination "c:\tmp"

Copia de ficheros

Copiar la carpeta c:\doc del servidor y todos sus subdirectorios a la carpeta local c:\tmp.

PS C:\> Copy-Item -Path "c:\doc" -FromSession $rs -Destination "c:\tmp" -Recurse