Mi Blog
👉 Cómo conectar equipos Windows con Ansible

Cómo conectar equipos Windows con Ansible

 
(3 votos)

Ansible es capaz de conectar y automatizar tareas no solamente con equipos GNU/Linux, sino también con equipos Windows. En este tutorial aprenderemos a crear a modo de ejemplo un usuario de forma automática con Ansible en un equipo remoto Windows 7 para comprobar que Ansible funciona a la perfección.

Seguid leyendo y os enseñaré a configurar Windows para poder conectarlo a Ansible...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUÉ ES ANSIBLE?

Ansible es una plataforma de software libre para configurar y administrar ordenadores. Combina instalación multi-nodo (es decir: permite desplegar configuraciones de servidores y servicios por lotes), ejecuciones de tareas ad hoc y administración de configuraciones. Adicionalmente, Ansible es categorizado como una herramienta de orquestación. Gestiona nodos a través de SSH y no requiere ningún software remoto adicional (excepto Python 2.4 o posterior​ para instalarlo). Dispone de módulos que trabajan sobre JSON y la salida estándar puede ser escrita en cualquier lenguaje. Nativamente, utiliza YAML para describir configuraciones reusables de los sistemas.

Ventajas:

  • No necesita instalar agentes
  • Solo se necesita tener instalado Python en los equipos administrados
  • Gran biblioteca pública de módulos para aumentar su funcionalidad

 

Web: https://www.ansible.com/

 

 

Ansible es una herramienta típica de DevOPS para automatizar tareas y configuraciones

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un PC con GNU/Linux Debian (o similar) y Ansible instalado
  • Un PC con Windows 7 o superior

 

 

2.- CONFIGURAR LOS EQUIPOS WINDOWS

Para que Ansible funciona correctamente, se deben de cumplir una serie de requisitos previos en los equipos con Windows.

PowerShell v3.0 ó superior

Para comprobar la versión de PowerShell que tenemos instalada, abriremos una terminal de PowerShell y ejecutaremos el siguiente comando:

(Get-Host).version

 

 

Conectar Windows AnsibleVersión de Powershell

 

 

.NET 4.0 ó superior

Para comprobar la versión del .NET que tenemos instalada (puede haber varias versiones), abriremos una consola de PowerShell y ejecutaremos el siguiente comando:

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' -Recurse | Get-ItemProperty -Name version -EA 0 | Where { $_.PSChildName -Match '^(?!S)\p{L}'} | Select PSChildName, version

Conectar Windows AnsibleVersión de .NET

 

 

WinRM instalado y escuchando

El servicio de Windows Remote Management (WinRM) deberá estar arrancado para que la comunicación entre Ansible y los equipos Windows funcione correctamente. Para arrancarlo, iremos a Servicios y lo arrancaremos con botón derecho "Arrancar/Start":

Conectar Windows AnsibleServicio WinRM arrancado

 

 

Debemos tener configurado correctamente WinRM para que acepte peticiones. Para ello, desde una terminal de Administrador, ejecutaremos el siguiente comando y aceptaremos todas las preguntas que nos haga el asistente:

winrm quickconfig

 

 

En la siguiente imagen se pueden ver las preguntas que nos hace el asistente:

Conectar Windows AnsibleConfigurar WinRM

 

 

 

 

3.- CONFIGURAR ANSIBLE

Partiremos de la base que tenemos instalado Ansible en nuestro equipo. Una vez instalado, deberemos instalar también python3-pip para poder instalar paquetes de python. Para ello ejecutaremos el comando siguiente:

raul@debian:~$ sudo apt-get install python3-pip

 

 

Una vez instalado PIP, instalaremos pywinrm para poder comunicar Ansible y equipos windows a través de Windows Remote Management. Ejecutaremos el siguiente comando:

raul@debian:~$ sudo pip3 install pywinrm

 

 

Aunque existen diferentes formas de configurar y ordenar los hosts manejados por Ansible, vamos a realizar la configuración más básica para manejar un equipo cliente con Windows 7. Para ello, editaremos el fichero /etc/ansible/hosts y añadiremos las siguientes líneas, donde deberemos cambiar la IP del equipo Windows y el usuario y la contraseña. Se recomienda usar otro usuario administrador diferente al "Administrador" por defecto. El resto de parámetros los dejaremos igual:

[win]
192.168.1.78

[win:vars]
ansible_ssh_user = ansible
ansible_ssh_pass = ansible
ansible_ssh_port = 5985
ansible_connection = winrm
ansible_winrm_transport = basic
ansible_winrm_server_cert_validation = ignore

 

 

La configuración de Ansible es tan sencilla como la configuración arriba indicada. Creamos un grupo de hosts llamado "win" y se le asignan una seria de variables a dicho grupo con "win:vars". Lógicamente, el nombre del grupo puede ser otro.

 

 

4.- PROBAR LA CONEXIÓN ENTRE ANSIBLE Y WINDOWS

Para comprobar si la conectividad y la configuración entre Ansible y el equipo con Windows es correcta, ejecutaremos el siguiente comando que debe mostrar un mensaje de éxito en color verde:

raul@debian:~$ ansible win -m win_ping

 

 

Deberemos obtener un mensaje de conexión exitosa con una respuesta SUCCESS como en la siguiente imagen:

Conectar Windows AnsibleConexión WinRM satisfactoria

 

 

Si obtenemos el siguiente error "basic: the specified credentials were rejected by the server", aplicar los cambios del paso 6 y probar de nuevo.

 

 

5.- CREAR UN USUARIO REMOTO CON ANSIBLE

Para comprobar que efectivamente podemos automatizar tareas en los equipos Windows gestionados con Ansible, vamos a crear un pequeño Playbook (script) para Ansible el cual creará un usuario local en el equipo remoto Windows 7. Crearemos el siguiente fichero /etc/ansible/win-create-user.yml:

---
- name: "Create user on Windows Machine"
hosts: win
tasks:
- name: "Check Windows machines access using win_ping"
win_ping:

- name: Create new user
win_user:
name: raul
password: raul
state: present
groups:
- Users

 

 

El equipo Windows remoto tiene solamente los siguientes usuarios creados: 

Conectar Windows AnsibleUsuarios Windows

 

 

Ahora, para ejecutar el Playbook ejecutaremos el siguiente comando:

raul@debian:~$ ansible-playbook win-create-user.yml

 

 

El Playbook comenzará a ejecutarse y en cada paso nos irá mostrando la salida:

Conectar Windows AnsibleEjecución del Playbook

 

 

Si refrescamos la lista de usuarios del equipo remoto, veremos que efectivamente el usuario ha sido creado satisfactoriamente:

Conectar Windows AnsibleUsuario creado desde Ansible

 

 

6.- SOLUCIÓN A PROBLEMAS DE CONEXIÓN CON WINRM

Si a la hora de realizar la prueba de conexión obtenemos un mensaje como "basic: the specified credentials were rejected by the server", abriremos una consola de PowerShell en modo Administrador y ejecutaremos los siguientes dos comandos: 

Set-Item -Force WSMan:\localhost\Service\auth\Basic $true
winrm set winrm/config/service '@{AllowUnencrypted="true"}'

 

 

Una vez ejecutados, volveremos a probar la conexión debería realizarse de forma correcta:

Conectar Windows AnsibleProblema de conexión 

 

 

ENJOY!