viernes, 6 de agosto de 2010

Acceso remoto con PowerShell - II

WinRM significa Windows Remote Management.Es el nuevo estándar de Microsoft para la administración remota. En lugar de usar RPC, usa HTTP o HTTPS.

Windows Server 2008 R2 y Windows 7 hacen uso de WinRM 2.0. Por defecto, esta herramienta está instalada, pero no habilitada.

WinRM se basa en los estandares WS-Management (Web Services for Management). WS-Management usa peticiones SOAP(Simple Object Access Protocol) para enviar y recibir instrucciones a máquinas remotas. Las peticiones SOAP se envían y reciben usando XML.

La versión WinRM 1.1 hace uso del puerto 80 para HTTP y 443 para HTTPS. La versión WinRM 2.0 hace uso del puerto 5985 para HTTP y 5986 para HTTPS.

PowerShell hace uso de WinRM para el acceso máquinas remotas.

Nota. Aunque usemos el protocolo HTTP, todas las conexiones están cifradas, siempre y cuando el mecanismo de autenticación sea "Integrated Windows Authentication".

Cuando los accesos sean entre máquinas del mismo dominio, podemos hacer uso de HTTP. Si el acceso es entre máquinas de dominios diferentes, es mejor habilitar HTTPS. Por
defecto, la configuración de WinRM hace uso del transporte HTTP.


Para saber si WinRM está funcionando en una máquina, hacemos:

winrm enumerate winrm/config/listener

Si no está habilitado, la forma más fácil de hacerlo es:

winrm quickconfig

Una vez habilitado, podemos comprobar que funciona bien, accediendo a otra máquina y ejecutando:

winrs -r:http://nombre_servidor:5985 comando o winrs -r:nombre_servidor comando

Si hemos iniciado la sesión con un usuario que no tiene privilegios sobre la máquina remota, hacerlo así:

winrs -r:nombre_servidor -u:dominio\usuario -p:contraseña comando

Por ejemplo: winrs -r:dc01 ipconfig

En varios sitios de Internet he visto que se puede llamar a PowerShell así:

winrs -r:dc01 powershell.exe

Pues esto a mi no me funciona, se llega a conectar, pero no muestra el prompt y no responde a los cmdlets. Lo que si funciona es lo siguiente:

winrs -r:dc01 powershell.exe cmdlet

Esto ejecuta el cmdlet de PowerShell en la máquina remota.

Si alguien sabe cómo hacer una conexión interactiva de esta manera, que me lo cuente.

Si queremos habilitar el transporte HTTPS en WinRM, hacer esto:

1) Solicitar un certificado web con nombre común el nombre DNS de la máquina.

2) winrm create winrm/config/listener?Address=*+Transport=HTTPS

3) Probarlo desde otra máquina: winrs -r:https://dc02.smb.local:5986 comando


Nota: En el caso de estar accediendo entre máquinas de dominios diferentes, tenemos que dar de alta a los clientes que se vayan a conectar, de la siguiente manera:

1) Habilitar autenticación básica en el servidor: WinRM set winrm/config/service/auth @{Basic="true"}
2) Agregar nombre de equipo que se va a poder conectar: WinRM set winrm/config/client @{TrustedHosts="Nombre_equipo"}
3) Habilitar autenticación básica en el cliente: WinRM set winrm/config/service/auth @{Basic="true"}
4) Agregar al cliente el nombre del servidor al que se va a conectar: WinRM set winrm/config/client @{TrustedHosts="Nombre_equipo"}
5) Recomendable habilitar en el servidor el transporte HTTPS.

No hay comentarios:

Publicar un comentario