Ahora nos tocan los hosts Windows, poco pero alguno tenemos en el laboratorio.
+----------+ +--------+ +----------+
| | | | | |<--> Lan 10.0.0.1/28
| | | | | Firewall |
| Internet |<---> | Router |<---Wan--->| OPNsense |<--> DMZINT 10.0.0.17/28
| | | | | |
| | | | | |<--> DMZEXT 10.0.0.33/28
+----------+ +--------+ +----------+
Desde el terminal.
$sudo pip install https://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm
$sudo pip install kerberos
$sudo yum -y install gcc python-devel krb5-devel krb5-workstation
$sudo pip install https://github.com/diyan/pywinrm/archive/master.zip#egg=pywinrm
$sudo pip install kerberos
Tanto el fichero de configuración de Ansible (ansible.cfg) como el de inventario (inventario)los tengo en un directorio dedicado únicamente a la gestión del laboratorio. Tienen el siguiente contenido.
[windows]
w1000-01 ansible_host=10.0.0.3
[windows:vars]
ansible_ssh_user=Administrador
ansible_ssh_pass=SuperPassword123!
ansible_ssh_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
Fichero copiado del de defecto de la instalación y modificado lo siguiente:
///////////
[defaults]
# some basic default values...
inventory = ./inventario
Utilizaremos WinRM.
Abiremos la consola de PowerShell con privilegios de administrador y seguimos los siguientes pasos:
PS C:/> Enable-PSRemoting -force -SkipNetworkProfileCheck
WinRM se ha actualizado para recibir solicitudes.
Se cambió el tipo de servicio WinRM correctamente.
Servicio WinRM iniciado.
WinRM se actualizó para administración remota.
Excepción de firewall WinRM habilitada.
LocalAccountTokenFilterPolicy configurado para conceder derechos administrativos en modo remoto a usuarios locales.
PS C:\> Set-Service WinRM -StartMode Automatic
PS C:\> Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}
ExitCode : 0
Name : WinRM
ProcessId : 6328
StartMode : Auto
State : Running
Status : OK
PS C:\> Set-ExecutionPolicy Unrestricted
Cambio de directiva de ejecución
La directiva de ejecución te ayuda a protegerte de scripts en los que no confías. Si cambias dicha directiva, podrías
exponerte a los riesgos de seguridad descritos en el tema de la Ayuda about_Execution_Policies en
https:/go.microsoft.com/fwlink/?LinkID=135170. ¿Quieres cambiar la directiva de ejecución?
[S] Sí [O] Sí a todo [N] No [T] No a todo [U] Suspender [?] Ayuda (el valor predeterminado es "N"): s
$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Upgrade-PowerShell.ps1"
$file = "$env:temp\Upgrade-PowerShell.ps1"
$username = "Administrador"
$password = "SuperPassword123!"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
# Version can be 3.0, 4.0 or 5.1
&$file -Version 5.1 -Username $username -Password $password -Verbose
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"
(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
powershell.exe -ExecutionPolicy ByPass -File $file
# This isn't needed but is a good security practice to complete
Set-ExecutionPolicy -ExecutionPolicy Restricted -Force
$reg_winlogon_path = "HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty -Path $reg_winlogon_path -Name AutoAdminLogon -Value 0
Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultUserName -ErrorAction SilentlyContinue
Remove-ItemProperty -Path $reg_winlogon_path -Name DefaultPassword -ErrorAction SilentlyContinue
Para verificar que Ansible esta configurado correctamente ejecutaremos el modulo win_ping.
$ansible windows -m win_ping
Como se puede observar se ejecuta correctamente. Sin esta comprobación correcta no podemos continuar.