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 :

  • 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

Les copains d’Ansible :

  • Puppet
  • Chef
  • Vagrant
  • SaltStack
  • Rudder

Liens Ansible utiles :

Ansible Github Repo :


Les fichiers de configuration Ansible :

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

Machines virtuelles nécessaires :

  • Windows Server 2016 (AD) : machine-virtuelle-pixelabs/
  • 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"
    }
    

    Ansible Ping Unix Host

    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.

     
    Besoin d’aide ? des questions ?

    Venez sur le forum
    logo Forum Pixelabs
    ***********
    La rédaction de cette documentation demande beaucoup de temps, de motivation, mais surtout beaucoup de café 🙂

    Vous aimez pixelabs ?

    Offrez moi un petit café en cliquant sur la tasse ci-dessous.
    pixelans_donation
    Merci !