Ansible Windows : WinRM vs OpenSSH
Mise à jour :
Contrairement aux idées reçues, Ansible ne se limite pas aux systèmes Linux. Il est tout à fait capable de gérer des machines Windows, à condition de bien configurer les connexions. Deux méthodes sont principalement utilisées : WinRM, historiquement supportée, et OpenSSH, de plus en plus populaire pour sa simplicité. Ce guide vous accompagne dans la mise en place de ces deux approches pour automatiser efficacement vos tâches sur Windows.
Prérequis
Pour gérer des hôtes Windows avec Ansible, certaines conditions doivent être réunies, tant côté système que du côté d’Ansible.
Coté Hôte Windows
Ansible prend en charge les versions récentes de Windows, notamment :
- Windows Server 2016, 2019, 2022
- Windows 10 et Windows 11
Veillez à toujours maintenir vos systèmes à jour pour garantir une compatibilité optimale avec les modules Ansible.
Assurez-vous que les hôtes Windows disposent de :
- PowerShell 5.1 ou supérieur
- .NET Framework 4.0 ou supérieur
Ces composants sont nécessaires pour exécuter les commandes envoyées par Ansible, surtout via WinRM.
Coté Controlleur Ansible
Collections nécessaires côté Ansible Installez les collections suivantes :
ansible-galaxy collection install ansible.windowsansible-galaxy collection install community.windows
Ces collections fournissent tous les modules spécifiques à Windows
(win_service
, win_package
, etc.).
Python côté contrôleur Ansible Sur le poste de contrôle (Linux), Ansible doit tourner avec au minimum une version récente de Python.
Une fois ces prérequis respectés, vous pouvez passer à la configuration des connexions selon le protocole choisi : WinRM ou OpenSSH.
Utilisation de WinRM
WinRM (Windows Remote Management) est le protocole de gestion à distance intégré à Windows. Il permet d’exécuter des commandes PowerShell à distance et d’administrer des systèmes Windows via des API REST. WinRM est le choix traditionnel pour gérer des hôtes Windows avec Ansible, mais il nécessite une configuration plus complexe que OpenSSH.
Configuration de l’écouteur WinRM
1. Activation de WinRM sur la machine Windows
Ouvrez PowerShell en tant qu’administrateur et exécutez :
Enable-PSRemoting -Force
Cela configure un écouteur HTTP sur le port 5985, active le service WinRM et modifie le pare-feu automatiquement.
2. Vérification des écouteurs
Pour afficher les écouteurs actifs :
winrm enumerate winrm/config/Listener
3. Mise en place d’un écouteur HTTPS
HTTPS est recommandé en production. Créez un certificat auto-signé, puis :
winrm quickconfig -transport:https
Ou via PowerShell :
$selector_set = @{ Address = "*" Transport = "HTTPS"}$value_set = @{ CertificateThumbprint = "VOTRE_THUMBPRINT"}New-WSManInstance -ResourceURI "winrm/config/Listener" -SelectorSet $selector_set -ValueSet $value_set
4. Autorisations supplémentaires
Pour les comptes locaux :
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" -Name "LocalAccountTokenFilterPolicy" -Value 1 -PropertyType DWORD -Force
Pour activer l’authentification Basic :
Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true
Utilisez HTTPS avec l’authentification Basic, car les identifiants sont transmis en clair.
5. Ajustement de la mémoire (hotfix pour PowerShell 3.0)
Si vous utilisez PowerShell 3.0, appliquez ce correctif :
$url = "https://raw.githubusercontent.com/jborean93/ansible-windows/master/scripts/Install-WMF3Hotfix.ps1"$file = "$env:temp\Install-WMF3Hotfix.ps1"(New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)powershell.exe -ExecutionPolicy ByPass -File $file -Verbose
Ansible** peut exécuter des tâches sur des hôtes Windows à l’aide du
PowerShell Remoting Protocol (PSRP), en passant par deux plugins de
connexion : winrm
et psrp
. Ces deux plugins utilisent WinRM comme transport
réseau (HTTP/HTTPS), mais diffèrent dans leur implémentation côté Ansible.
Les plugins de connexion
Ansible utilise des plugins de connexion pour établir la communication avec les
hôtes distants. Pour Windows, les deux principaux plugins sont winrm
et
psrp
. Le choix entre ces deux plugins dépend de vos besoins spécifiques et de
votre environnement.
Le plugin winrm
(par défaut)
Le plugin winrm
est utilisé par défaut avec la variable
ansible_connection=winrm
. Il repose sur la bibliothèque pywinrm
et traduit
les modules Ansible en commandes PowerShell envoyées via WinRM.
Installation :
pip install pypsrp
Avantages :
- Supporté de longue date
- Compatibilité avec tous les modules
ansible.windows
- Fonctionne bien dans des environnements simples
Limites :
- Gestion limitée des sessions PowerShell
- Moins performant avec de longues sorties
- Sensible aux délais d’attente (timeouts) et à la latence
Le plugin psrp
(PowerShell Remoting Protocol)
Introduit plus récemment, le plugin psrp
repose sur la bibliothèque pypsrp
.
Il utilise les sessions PowerShell de manière native, ce qui permet une
exécution plus fiable et performante.
Installation :
pip install pypsrp
Configuration typique :
[windows]192.168.1.10
[windows:vars]ansible_connection=psrpansible_user=Administrateuransible_password=MotDePasseSécuriséansible_psrp_protocol=httpsansible_psrp_port=5986ansible_psrp_auth=negotiateansible_psrp_cert_validation=ignore
Avantages :
- Exécution native dans PowerShell
- Meilleure gestion des flux de sortie
- Moins de timeouts et de bugs sur des connexions longues
- Prise en charge de proxys et de configurations personnalisées
Limites :
- Moins utilisé, donc moins documenté
- Requiert
pypsrp
, non installé par défaut
Que choisir : winrm
ou psrp
?
Besoin | Recommandé |
---|---|
Simplicité, compatibilité large | winrm |
Performances, fiabilité, environnements complexes | psrp |
Sessions PowerShell personnalisées | psrp |
Intégration avec modules ansible.windows | Les deux |
Dans les environnements modernes,
psrp
est souvent plus robuste quewinrm
, surtout si vous utilisez HTTPS et avez besoin de gérer de nombreuses tâches consécutives.
Utilisation d’OpenSSH
Depuis les versions récentes de Windows 10/11 et Windows Server 2019+, OpenSSH est intégré en tant que fonctionnalité optionnelle. Cette méthode de connexion permet à Ansible d’accéder à Windows via SSH, comme il le ferait pour un hôte Linux. Elle est plus simple à configurer que WinRM et repose sur le protocole SSH standard.
Installation du serveur OpenSSH sur Windows
1. Activer le composant OpenSSH Server
Dans PowerShell en tant qu’administrateur :
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
2. Démarrer et activer le service SSHD
Start-Service sshdSet-Service -Name sshd -StartupType 'Automatic'
3. Ouvrir le port 22 dans le pare-feu
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Configuration du shell par défaut (PowerShell)
Par défaut, SSH utilise cmd.exe
. Pour que PowerShell soit utilisé comme
shell distant :
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Redémarrez le service
sshd
après cette modification.
Configuration de l’inventaire Ansible
[windows]192.168.1.10
[windows:vars]ansible_connection=sshansible_user=ansibleuseransible_password=MotDePasseSécuriséansible_shell_type=powershellansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
Si vous utilisez l’authentification par clé SSH, installez la clé publique dans
C:\Users\USERNAME\.ssh\authorized_keys
.
Bonnes pratiques
- Utilisez l’authentification par clé SSH pour éviter les mots de passe en clair.
- Assurez-vous que le service SSHD est toujours actif et démarre automatiquement.
- Sécurisez l’accès SSH via des ACLs ou
sshd_config
. - Vérifiez les logs en cas d’erreur dans
C:\ProgramData\ssh\logs
.
Limitations connues
- Certaines fonctionnalités avancées de PowerShell (comme la double authentification Kerberos) peuvent ne pas fonctionner via SSH.
- Tous les modules Ansible Windows ne sont pas garantis compatibles avec SSH.
Plus d’infos sur Configuring Ansible for SSH on Windows ↗
Comparaison entre WinRM et OpenSSH
Ansible permet de se connecter à un hôte Windows via WinRM ou OpenSSH. Ces deux méthodes présentent des différences majeures en termes de configuration, de sécurité, de compatibilité et de maintenance.
Tableau comparatif
Critère | WinRM | OpenSSH |
---|---|---|
Installation | Natif sur Windows | Optionnel à activer |
Configuration initiale | Complexe (HTTPS, ACL, certificats) | Simple (activation, pare-feu) |
Port utilisé | 5985 (HTTP), 5986 (HTTPS) | 22 (SSH) |
Sécurité | Nécessite HTTPS pour sécuriser Basic auth | Chiffrement natif |
Authentification | Basic, NTLM, Kerberos, CredSSP | Mot de passe, clé SSH, GSSAPI |
Shell par défaut | PowerShell | cmd.exe (modifiable) |
Transfert de fichiers | Lenteur connue avec win_copy | Rapide avec scp intégré |
Support dans Ansible | Depuis toujours | Stable depuis Ansible 2.14+ |
Compatibilité modules | 100% (modules win_* ) | Partielle, certains modules limités |
Dépannage / logs | Plus complexe | Simplicité des logs sshd |
Scénarios entreprise | Intégré à Active Directory | Moins intégré aux environnements AD |
Quand utiliser WinRM ?
- En environnement d’entreprise avec des politiques Active Directory
- Pour des tâches complexes utilisant des modules natifs Windows
- Quand vous avez besoin d’un support complet des modules Ansible
Quand utiliser OpenSSH ?
- Pour un projet rapide ou un lab local
- Sur des systèmes Windows modernes (10/11, Server 2019+)
- Si vous maîtrisez déjà SSH et souhaitez une configuration légère
Test de la connexion
Une fois la configuration terminée, testez la connexion à l’hôte Windows avec la commande suivante :
ansible windows -i inventory.ini -m win_ping
Réponse attendue :
192.168.1.10 | SUCCESS => { "changed": false, "ping": "pong"}
Les collections Ansible pour Windows
Pour gérer efficacement des systèmes Windows avec Ansible, il est indispensable d’utiliser les collections de modules dédiées. Ces collections regroupent des modules, plugins et rôles conçus spécifiquement pour Windows, et permettent de bénéficier des dernières fonctionnalités et corrections.
Installation des collections
Pour installer les collections nécessaires, utilisez la commande suivante :
ansible-galaxy collection install ansible.windows community.windows
Cette commande télécharge et installe les collections ansible.windows
et
community.windows
depuis le dépôt officiel d’Ansible Galaxy. Ces collections
sont régulièrement mises à jour pour intégrer de nouveaux modules et corriger
des bugs. Il est donc recommandé de les mettre à jour régulièrement avec la
commande :
ansible-galaxy collection install ansible.windows community.windows --force
Cette commande force la réinstallation des collections, même si elles sont déjà
installées. Cela garantit que vous disposez de la dernière version des modules
et plugins. Vous pouvez également spécifier une version particulière de la
collection en ajoutant ==<version>
à la fin de la commande. Par exemple :
ansible-galaxy collection install ansible.windows==1.0.0
Vous pouvez aussi utiliser le fichier requirements.yml
pour gérer les
dépendances de vos projets Ansible. Voici un exemple de fichier
requirements.yml
pour installer les collections ansible.windows
et
community.windows
:
---collections: - name: ansible.windows version: "2.8.0" - name: community.windows version: "2.4.0"
Ensuite, exécutez la commande suivante pour installer les collections définies
dans le fichier requirements.yml
:
ansible-galaxy collection install -r requirements.yml
La collection ansible.windows
Cette collection est la collection officielle d’Ansible pour la gestion des systèmes Windows. Elle est maintenue par l’équipe Ansible et est disponible sur Ansible Galaxy. Elle est conçue pour fonctionner avec les dernières versions de Windows et est régulièrement mise à jour pour intégrer de nouveaux modules et fonctionnalités.
Présentation
La collection ansible.windows
regroupe l’ensemble des modules et plugins
dédiés à l’administration, la configuration et l’automatisation des
environnements Windows avec Ansible. Elle couvre tous les besoins courants d’un
administrateur système ou d’un ingénieur DevOps travaillant sur des serveurs ou
postes de travail Windows : gestion des utilisateurs, des groupes, des services,
des fichiers, du registre, des rôles Windows, des tâches planifiées, de la
sécurité, etc.
Grâce à cette collection, il est possible de piloter des infrastructures Windows de la même manière que des systèmes Linux, en profitant de la puissance d’Ansible pour l’automatisation, l’orchestration et la conformité.
Portée fonctionnelle
Pour vous repérer dans la collection, voici une cartographie des principaux domaines couverts, avec quelques modules emblématiques :
Domaine | Exemples de modules | Pour quoi faire ? |
---|---|---|
Gestion des utilisateurs | win_user , win_group | Créer, modifier ou supprimer des comptes et groupes locaux. |
Gestion des fichiers | win_copy , win_file , win_template | Copier, supprimer, déplacer ou gérer les permissions sur les fichiers et dossiers. |
Services & processus | win_service , win_process | Démarrer, arrêter, configurer ou surveiller des services et processus Windows. |
Registre Windows | win_regedit , win_reg_stat , win_reg_merge | Lire, écrire ou supprimer des clés et valeurs du registre. |
Rôles & fonctionnalités | win_feature , win_role | Installer ou désinstaller des rôles et fonctionnalités Windows Server. |
Tâches planifiées | win_scheduled_task | Créer, modifier ou supprimer des tâches planifiées. |
Sécurité & stratégie | win_firewall_rule , win_user_right | Gérer les règles du pare-feu, les droits utilisateurs, les stratégies locales. |
Réseau | win_dns_client , win_route , win_hostname | Configurer le DNS, les routes, le nom d’hôte, etc. |
Mises à jour | win_updates , win_hotfix | Installer les mises à jour Windows ou vérifier les correctifs installés. |
Utilitaires divers | win_command , win_shell , win_stat | Exécuter des commandes, scripts PowerShell, récupérer des informations système. |
Gardez en tête que le préfixe win_
est votre meilleur repère : tous les
modules commençant par win_
sont conçus pour fonctionner sur des hôtes
Windows.
La collection community.windows
La collection community.windows
est une collection communautaire qui
complète la collection officielle ansible.windows
. Elle est maintenue par des
contributeurs externes et propose des modules supplémentaires pour répondre à
des besoins spécifiques ou moins courants. Elle est particulièrement utile pour
les utilisateurs d’Ansible qui souhaitent étendre les fonctionnalités d’Ansible
sur Windows, en ajoutant des modules qui ne sont pas encore disponibles dans la
collection officielle.
Présentation
La collection community.windows
regroupe des modules développés et maintenus
par la communauté pour étendre les capacités d’Ansible sur les systèmes
Windows. Elle complète la collection officielle ansible.windows
en proposant
des fonctionnalités spécifiques ou moins courantes, mais très utiles pour
des besoins réels en entreprise ou en laboratoire.
Elle est particulièrement précieuse pour gérer Chocolatey, les modules PowerShell, les raccourcis, ou encore les variables d’environnement, autant de cas d’usage absents de la collection principale.
Portée fonctionnelle
Voici un aperçu des domaines couverts par community.windows
, avec quelques
modules représentatifs :
Domaine | Exemples de modules | Pour quoi faire ? |
---|---|---|
Gestion des paquets | win_chocolatey | Installer, mettre à jour ou désinstaller des logiciels via Chocolatey. |
Environnement PowerShell | win_psmodule , win_psrepository | Installer des modules PowerShell depuis PSGallery ou autres dépôts. |
Variables d’environnement | win_environment | Créer, modifier ou supprimer des variables d’environnement système ou utilisateur. |
Gestion des chemins | win_path | Ajouter ou retirer des entrées dans la variable PATH . |
Raccourcis Windows | win_shortcut | Créer ou modifier des raccourcis .lnk sur le bureau ou dans le menu Démarrer. |
Sécurité avancée | win_account_policy , win_audit_policy_system | Gérer les stratégies de compte et les paramètres d’audit. |
Messages utilisateur | win_message | Afficher des messages en popup aux utilisateurs connectés. |
Manipulation d’objets COM | win_dcom_app , win_dsc | Configurer des applications COM ou des scripts DSC. |
Ces modules permettent une automatisation fine de nombreux aspects du système Windows, en s’appuyant sur des outils natifs comme PowerShell ou les APIs COM.
Conclusion
Ansible est un outil puissant pour gérer des systèmes Windows, que ce soit via WinRM ou OpenSSH. Le choix entre les deux dépend de vos besoins spécifiques, de votre environnement et de votre familiarité avec les outils.