Administrer Windows Server avec Ansible

Nous allons voir dans cet article comment installer et configurer RedHat Ansible sous CentOS 7. Ansible permet également d’administrer les serveurs Windows. Les modules sont écrits en PowerShell et exécuter au travers Windows Remote Management (WinRM) qu’il faut configurer avant de pouvoir administrer les serveurs Windows…

Voici ce que vous devez savoir sur Ansible :

  • Installation simple et rapide (RPM, APT, PIP, YUM, GIT…)
  • Il utilise un langage simple pour gérer les conf : YAML
  • Pas d’infrastructure à gérer pour Ansible
  • Pas de serveur Central (master) ni d’agent
  • Pas besoin d’une grosse machine pour tourner Ansible
  • Peut être installé sur tous les systèmes ou presque (Unix, FreeBSD et MacOS)
  • Peut être installé sous Windows grâce à Microsoft WSL (Windows Subsystem for Linux)
Ce qu’il vous faut
Les copains d’Ansible :
Une VM sous Linux avec un interpréteur : Python 2.7+
Une ou plusieurs VM de tests
Savoir mettre en place les clés SSH
Connaissance langage YAML
Python pour les modules
Puppet
Chef
Vagrant
SaltStack
Rudder
Liens Ansible utilesAnsible Github Repo
Ansibleansible.com/
Github Ansible : /ansible
Ansible Galaxy : explore#/
Documentation Center : docs.ansible.com/
Guide d’installationinstallation_guide/
YAML Syntax#yaml-syntax
Playbooks : playbooks/
Les modules : list_of_all_modules
Ansible Release :ansible/releases
Ansible exemple Playbooks : /ansible-examples
Playbooks by : snowplow/ansible-playbooks
Playbooks by : mgcrea/ansible-web-playbooks
Playbooks by : sfromm/ansible-playbooks
Playbooks by : nickjj/ansible-playbooks
Playbooks by : francisbesset/ansible-playbooks

Les fichiers de configuration Ansible :

  • /etc/ansible/hosts
  • /etc/ansible/ansible.cfg

Machines virtuelles nécessaires :

Ansible Windows Host

Il existe un script PowerShell fournit par Ansible qui permet de configurer WinRM sur les serveurs Windows rapidement : ansible/scripts/ConfigureRemotingForAnsible.ps1

Le script nécessite minimum Windows PowerShell 3. Vérifiez votre version à l’aide de la commande suivante. Exemple sous Windows Server 2012

PS C:\Users\Administrateur#> $PsVersionTable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34014
BuildVersion                   6.3.9600.16394
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

PS C:\Users\Administrateur>

Cependant, certains modules Ansible nécessites la version 5. Sous Server 2016, la version 5.1 est disponible par défaut, mais si vous êtes sous Windows Server 2012 R2, télécharger et installer la version 5.1 : Win8.1AndW2K12R2-KB3191564-x64.msu

PS C:\Users\Administrateur#> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14409.1005
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14409.1005
CLRVersion                     4.0.30319.34209
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

PS C:\Users\Administrateur>

Les méthodes d’authentifications possibles avec Ansible :

Option d’authentificationCompte localCompte Active Directory
BasicOuiNon
CertificatsOuiNon
KerberosNonOui
NTLMOuiOui
CredSSPOuiOui

Voir le tableau complet ici : #authentication-options

L’authentification CredSSP (Credential Security Support Provider) est un nouveau protocole d’authentification et peut être utilisé pour les comptes locaux et les comptes du domaine Active Directory. Il prend également en charge le cryptage des messages via HTTP.

Remarque : Si vous souhaitez utiliser l’authentification Kerberos avec Ansible, n’oubliez pas de rajouter Ansible sur votre serveur DNS (Recherche directe et inversée). Kerberos nécessite une recherche DNS directe et inversée pour fonctionner correctement.

Install Python2.7.10

La version Python installée par défaut sous CentOS 7 est la 2.7.5. Je n’ai pas réussi à faire fonctionner Ansible/Windows avec cette version en utilisant le protocole d’authentification CredSSP (pas de problème sous Linux, voir le premier chapitre). Il semble qu’il faut la version 2.7.9 et plus

[root@ansible tmp]# python --version
Python 2.7.5
[root@ansible tmp]#

Heureusement, il est possible d’installer plusieurs versions sous Linux, car vous ne pouvez pas désinstaller Python, il fait partie du système. Nous allons installer la version 2.7.10 et configurer la variable $PATH pour indiquer au système la nouvelle version de Python.

Faisons les choses rapidement vous voulez bien :

  • Télécharger ce script sur GitHub : F1ashhimself/Python2.7.10
  • Le transférer sur votre serveur Ansible : /tmp
  • Ajouter les droits d’exécution :
[root@ansible tmp]# chmod 755 install_python2.7.10.sh

J’ai dû renommer le script 

  • Lancez le script
[root@ansible tmp]# ./install_python2.7.10.sh

Perso à la fin, j’ai dû rebooté le serveur : [root@ansible tmp]#  reboot

La commande doit renvoyée la nouvelle version.

[root@ansible tmp]# python --version
Python 2.7.10
[root@ansible tmp]#

Si ce n’est pas le cas, si vous avez toujours la même version, pas de panique, il faut juste indiquer au système la nouvelle version. D’ailleurs, elle est bien installée.

Vous pouvez vérifier :

[root@ansible tmp]# python2.7 --version
Python 2.7.10
[root@ansible tmp]#

Pour utiliser cette version par défaut, exécuter ces deux commandes l’une après l’autre :

Python2  >>  Version 2.7.5

[root@ansible tmp]# alternatives --install /usr/bin/python python /usr/bin/python2 50

Python2.7  >>  Version 2.7.10 

[root@ansible tmp]# alternatives --install /usr/bin/python python /usr/bin/python2.7 60

Maintenant, sélectionnez la version 2.7.10 :

[root@ansible tmp]# alternatives --config python

Tapez 2 et Entrée :

Setup Python Version 2.7.10

Vérifiez :

[root@ansible tmp]# python --version
Python 2.7.10
[root@ansible tmp]#

Install Packages requirements

Installation des packages nécessaires pour Ansible :

[root@ansible ]# yum -y install groupinstall "development tools"
[root@ansible ]# yum -y install zlib-devel openssl-devel openssl libffi-devel
[root@ansible ]# yum -y update

Install Module Python

Installez les packages Python WinRM et Requests

[root@ansible ]# yum -y install python2-winrm python2-requests

Installez PIP :

[root@ansible ]# yum -y install python2-pip

Installation des modules Python à l’aide de PIP. Module pyOpenSSL (18.0.0)

[root@ansible ]# pip install pyOpenSSL

Module pywinrm :

[root@ansible ]# pip install "pywinrm[credssp]"

Pour vérifier les version installées : pip search « pywinrm[credssp] »

[root@ansible ~]# pip search "pywinrm[credssp]"
vcdriver (4.0.0) - A vcenter driver based on pyvmomi, fabric and pywinrm
pywinrm (0.3.0) - Python library for Windows Remote Management
INSTALLED: 0.3.0 (latest)
requests-credssp (1.0.0) - HTTPS CredSSP authentication with the requests library.
INSTALLED: 1.0.0 (latest)
winrmlib (1.3) - Python library for Windows Remote Management with CredSSP and NTLMv2

Configuration WinRM

Passons maintenant à la configuration de WinRM sur le contrôleur de domaine :

# PS C:\Users\Administrateur> cd C:\ansible
PS C:\ansible> Set-ExecutionPolicy Unrestricted
  • Exécuter le script : en tant qu’administrateur
# PS C:\ansible> dir

    Répertoire : C:\ansible

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        22/06/2018     18:15      15509 # ConfigureRemotingForAnsible.ps1
# PS C:\ansible> .\ConfigureRemotingForAnsible.ps1 -CertValidityDays 3650 -EnableCredSSP

A la fin, le script doit renvoyer la chaine « Ok ». Désolé j’ai oublié de mettre le résultat, quand je relance le script, il affiche plus rien. 

Ne pas oublier : -EnableCredSSP

Remarque : n’oubliez pas de désactiver le pare-feu OU d’autoriser WinRM : Port tcp/5985 = HTTP /  Port tcp/5986 = HTTPS

Add Windows Host

Éditer le fichier /etc/ansible/hosts. Ajouter le groupe Windows et l’hôte : [windows]

Remarque : Si vous n’avez pas de serveur DNS, mettez les adresses IP.

[centreon]
centreon.pixelabs.local

[centos]
pixelabs.pixelabs.local

[windows]
ad-server16.pixelabs.local

Faisons un test.

Remarque : attention les modules ne sont pas les mêmes. Pour Linux = ping. Pour Windows = win_ping

Groupe Centreon Server :

[root@ansible ansible]# ansible centreon -m ping
centreon.pixelabs.local | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Groupe CentOS Server :

[root@ansible ansible]# ansible centos -m ping
pixelabs.pixelabs.local | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible Ping Group Host

Groupe Windows Server :

[root@ansible ansible]# ansible windows -m win_ping
ad-server16.pixelabs.local | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: connect to host ad-server16.pixelabs.local port 22: Connection refused\r\n",
    "unreachable": true
}
[root@ansible ansible]#

Il manque les variables d’authentification. Allez dans /etc/ansible

[root@ansible ansible]# mkdir group_vars
[root@ansible ansible]# cd group_vars/

Création de fichier windows.yml. Le même nom que le groupe [windows]

[root@ansible group_vars]# nano windows.yml

Ajoutez à l’intérieur :

ansible_user: Administrateur@pixelabs.local
ansible_password: P@ssword!
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
ansible_winrm_transport: credssp
  • Avec l’éditeur nano :
    • Enregistrer : Ctrl+O et Entrée
    • Quitter : Ctrl + X

Relancer le ping :

[root@ansible group_vars]# ansible windows -m win_ping
ad-server16.pixelabs.local | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
[root@ansible group_vars]#

Setup Windows Host Ansible

C’est terminé les amis.  Ansible est prêt à faire son job sur le serveur Windows. Je vous laisse découvrir Ansible, explorer et récupérer les modules sur le site Ansible (voir les liens au début de l’article).

Nous verrons dans les prochains articles comment administrer les serveurs Linux/Windows avec Ansible.

Bonne journée et à bientôt.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *