Administración Remota de Windows Vista mediante WS-Management (I de III)

Ya llevamos un año y medio de Windows Vista, y aun tenemos para largo para llegar a explicar todas las mejoras incluidas en este Sistema Operativo. Hoy revelaremos una bastante útil e interesante: la administración remota mediante WINRM, la implementación de Microsoft del estándar “WS-Management”.

WS-Management también conocido como “Web Services for Management” (Servicios Web para Administración) es un protocolo estándar del “Distributed Management Task Force” (DMTF),  importante grupo del que forman parte empresas como IBM, Novell, HP, Sun Microsystems, Intel y Microsoft entre muchas otras.  Las especificaciones concretas de WS-Management las podéis obtener en PDF (y en inglés) en la siguiente dirección:


http://www.dmtf.org/standards/wsman


A grandes rasgos WS-Management busca concretar las bases para una administración remota, multiplataforma, fácil, eficaz y distribuida a través de HTTP y HTTPS mediante el estándar de comunicación de aplicaciones “SOAP”, esto significa que es posible administrar un equipo remotamente y de manera segura a través de https (puerto abierto en la mayoría de los routers) sin necesidad de preestablecer una comunicación mediante VPN.


WS-Management hace uso de URIs para identificar y publicar un elemento de administración y “Selectores” para identificar una determinada instancia de ese elemento si existe más de una; este formato sigue el convenio de publicación de “WS-Addressing”, de manera que se puedan identificar y buscar servicios publicados para comunicaciones SOAP.


El siguiente ejemplo representa las cabeceras de comunicación XML (usado en SOAP) de un mensaje WS-Management estándar basado en WS-Addressing (URI y Selector en Negrita).



  1.  <s:Envelope

  2. xmlns:s=http://www.w3.org/2003/05/soap-envelope

  3. xmlns:wsa=http://schemas.xmlsoap.org/ws/2004/08/addressing 

  4. xmlns:wsman=”http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd”>

  5. <s:Header> 

  6.  …

  7. <wsa:To>http://123.99.222.36/wsman</wsa:To> 

  8. <wsman:ResourceURI mustUnderstand=”true”>

  9.  http://example.org/hardware/2005/02/storage/physDisk 

  10. </wsman:ResourceURI>

  11. <wsman:SelectorSet>

  12. <wsman:Selector Name=”LUN”> 2 </wsman:Selector>

  13. </wsman:SelectorSet>

  14. <wsa:Action> http://schemas.xmlsoap.org/ws/2004/09/transfer/Get</wsa:Action> 

  15. <wsa:MessageID> urn:uuid:d9726315-bc91-430b-9ed8-ce5ffb858a91</wsa:MessageID>


  16. </s:Header>

  17. <s:Body> … </s:Body>

  18. </s:Envelope>

Configuración de una Shell Remota mediante WS-Management:


Windows Vista (y por ende Windows Server 2008) ofrecen dos comandos para la gestión de WS-Management: WINRM (para la configuración del servidor y de servidores remotos) y WINRS (cliente para la ejecución de comandos remotos), a estos dos comandos habría que añadir la capacidad de PowerShell 2.0 (el potentísimo nuevo interprete de comandos de Microsoft) de invocar CMDLETS remotos gracias a este protocolo.


Podéis descargar la versión CTP de PowerShell 2.0 en el siguiente enlace:


http://www.microsoft.com/downloads/details.aspx?FamilyID=60deac2b-975b-41e6-9fa0-c2fd6aa6bc89&DisplayLang=en


Como he señalado hace un momento, WINRM es el comando de configuración del servidor del protocolo WS-Managament, no obstante, una versión anterior de este comando ya aparecía en “Windows Server 2003 R2” destinada fundamentalmente (aun que no de manera exclusiva)  a la gestión remota de hardware. Para más información sobre este elemento en “Windows Server 2003 R2” podéis visitar el siguiente enlace (en inglés):


http://technet2.microsoft.com/windowsserver/en/library/f550cac0-5344-41cb-8e89-6e5c932368861033.mspx?mfr=true


WinRM también se puede instalar en Windows XP, aquí tenéis el enlace de la descarga:


http://www.microsoft.com/downloads/details.aspx?FamilyID=845289ca-16cc-4c73-8934-dd46b5ed1d33&DisplayLang=en


 


Configurando el Servidor para la ejecución remota de comandos:


Comencemos con lo que nos interesa: vamos a comprobar como se configura un equipo con Windows Vista y WINRM para lanzar comandos e instrucciones remotamente desde otro equipo.


Primeramente deberemos abrir el CMD, pero como WINRM es un comando administrativo requeriremos elevar los privilegios atravesando el “Control de Cuentas de Usuario” (UAC) seleccionando la opción “Ejecutar como Administrador” en el menú contextual sobre el CMD.


Como cualquier otro comando, os interesará comprobar la ayuda de WINRM ejecutando “WINRM /?”; compruebe la información de ayuda de los parámetros principales, pero sobre todo no olvide comprobar la ayuda de los aspectos básicos  relacionados con WINRM mediante “winrm help uris”, “winrm help aliases”, “winrm help config”, “winrm help remoting”, “winrm help auth”, “winrm help input” y “winrm help switches”, donde podrá obtener información general de las especificaciones del protocolo.



Existen diferentes aspectos importantes que se pueden llegar a configurar dentro de WINRM, como cuáles son las IPs de los equipos considerados de confianza para la ejecución de comandos, la asociación de certificados SSL para HTTPS, métodos de autenticación admitidos, el número máximo de conexiones concurrentes etc.; no obstante, existe un parámetro que nos permite realizar en un solo paso las tareas necesarias para configurar WS-Management a nivel básico: “WINRM quickconfig”, el cual además de activar el servicio necesario, configurará las reglas del Firewall para permitir el acceso a través del puerto 80 (http). 


Si deseamos configurar el acceso a través del puerto 443 (https) se debe usar “WINRM quickconfig -transport:https” y se requiere disponer de un certificado SSL valido emitido por una Entidad Emisora de Certificados de confianza para nuestro equipo.


Nota: WINRM no permite el uso de certificados autofirmados.


Tras la labor anterior es conveniente comprobar que el servicio necesario se encuentre en funcionamiento y que se hayan creado las reglas del firewall oportunas (ver imágenes), también es conveniente ejecutar un “netstat -an” para comprobar que el puerto 80 TCP se encuentre a la escucha en el equipo (no se requiere Internet Information Server para el funcionamiento de este protocolo).




Nota: Una buena práctica de seguridad consistiría en modificar las reglas predeterminadas del firewall para limitar el ámbito de equipos que pueden tener acceso de manera remota al puerto 80, e incluso habilitar IPSEC para dicho puerto.


Tras ejecutar “quickconfig” ya estaría el Servidor preparado para dar servicio a equipos remotos, no obstante es posible (y conveniente) modificar las opciones de configuración predeterminadas para conseguir un mayor control y seguridad en las comunicaciones (utilizar https siempre que se a posible, limitar las interfaces a la escucha etc.).


A continuación expondré algunos de los comandos de utilidad relativos a la configuración de WINRM.


Comandos WINRM para comprobación de la configuración:



  • winrm enumerate winrm/config/Listener

Lista la configuración del puerto a la escucha



  • winrm get wmicimv2/Win32_Service?Name=WinRM

Comprueba la configuración del servicio WINRM mediante WMI



  • winrm get winrm/config

Muestra la configuración actual de WINRM


Nota: Dentro de la configuración es interesante comprobar los tipos de autentificación usados por defecto en WINRM (Kerberos y NTLMv2), también podemos comprobar que la autentificación básica está deshabilitada y que no existen filtros IPs  para la comunicación, algo que también es aconsejable configurar.


Ejemplos de uso de WINRM para cambios de configuración:



  • WINRM set winrm/config/service/Auth @{Basic=”TRUE”}

Permite conexiones con autentificación básica (contraseña enviada usando base64 y por tanto insegura)



  • WINRM set winrm/config/service @{IPv4Filter=”192.168.5.200-192.168.5.255″}

Establece un filtro IP de manera que el servicio WINRM solo escuche en las interfaces configuradas con alguna de las IPs del rango indicado



  • WINRM set winrm/config/service @{MaxConnections=”10″}

Aumenta el número de conexiones concurrentes permitidas de 5 a 10.


Nota: Como podéis comprobar las configuraciones más sencillas se realizan usando  “winrm set URI_DE_RECURSO @{Clave=”Valor”;Clave=valor;…}” debiendo escribir el nombre de la clave de forma correcta ya que se distinguen mayúsculas de minúsculas.


 


Conexión y ejecución de Shell remota desde cliente:


Una vez realizada la configuración básica del equipo que ejercerá de servidor, solo nos queda probar la ejecución remota de comandos desde un equipo cliente con el comando WINRS.


Antes de usar WINRS debemos comprobar que el servidor está preparado para ejecutar comandos remotos mediante winrm get winrm/config/winrs”, el valor AllowRemoteShellAccess debe estar establecido en “TRUE” (configuración por defecto). En caso de que no deseemos permitir la ejecución de comandos remotos es necesario ejecutar:


“winrm set winrm/config/winrs @{AllowRemoteShellAccess=”false”}”


Si no somos clientes de un Dominio o usamos https, WINRS requerirá que configuremos un parámetro adicional “TrustedHosts”, donde deberemos indicar las IPs de los equipos a los cuales deseamos conectarnos para la ejecución de comandos. Para modificar este parámetro debemos ejecutar el comando:


“winrm set winrm/config/client @{TrustedHosts=”*”}” (al poner un “*” estaremos permitiendo la comunicación con cualquier equipo remoto que ofrezca servicios WS-Management).


Una vez realizada la configuración de los parámetros AllowRemoteShellAccess y TrustedHosts ya estamos en condiciones de ejecutar comandos remotos sin problemas. Aquí tenéis algunos ejemplos:



  • WINRS -r:169.51.2.101  -u:administrador -p:123abc. ipconfig

Ejecuta el comando ipconfig en el equipo 169.41.2.101 con el usuario “administrador” y la contraseña “123abc.”



  • WINRS -r:169.51.2.101:81 -u:administrador -p:123abc. set       

Ejecuta el comando “SET” en un equipo configurado para escuchar bajo el puerto 81



  • WINRS -r:http://192.168.5.201 -u:administrador hostname

Ejecuta el comando “hostname” en el equipo 192.168.5.201 habiéndose indicado http como mecanismo de transporte. Al no poner el atributo “-p” se le preguntará al usuario de manera interactiva por una contraseña.



Si tuvierais cualquier problema de conexión podéis probar a ejecutar el siguiente comando para comprobar el buen funcionamiento de la comunicación:


 “WINRM identify -r:192.168.5.201 -u:administrador -p:123abc.”



Bueno, con esto ya hemos comprobado el uso WS-Management para la ejecución de comandos remotos, sin embargo esta no es la única tarea que puede realizarse con WINRM, ya que podemos usarla también para la Gestión y configuración de elementos WMI y las Suscripciones al visor de eventos Eventos de Windows Vista, en próximos post iremos desgranando estas interesantes características (prometo que no serán posts tan largos).


Por último solo queda añadir que ya existe la nueva versión WINRM 2.0 (actualmente en CTP), con nuevas APIs para el desarrollo de funcionalidades,  nuevos elementos de autorización de clientes y con la capacidad de enlazar comunicaciones WS-Management como si de un Proxy se tratara. Podéis descargar esta nueva versión en el siguiente enlace:


https://connect.microsoft.com/site/sitehome.aspx?SiteID=200


Como de costumbre mis posts suelen ser más largos de lo habitual en este blog, así que espero que os haya resultado ameno (en la medida de lo posible) e interesante. Agradezco vuestro interés y os espero en el próximo post para seguir indagando en este interesante sistema.

2 comentarios en “Administración Remota de Windows Vista mediante WS-Management (I de III)”

  1. # re: Administración Remota de Windows Vista mediante WS-Management (I de III) @lunes, 26 de mayo de 2008 14:34
    Creo que con este artículo me bautizo oficialmente como Friki (el último que quedaba por admitirlo en la empresa xDD).

    WINRM se encuentra en Windows Vista de manera integrada, es WINRM 2.0 el que se encuentra actualmente en formato CTP, de manera que todo lo descrito en el POST lo puede practicar cualquiera sin necesidad de instalar nada adicional.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *