Aller au contenu
English
English
Infrastructure as Code medium

Ansible Windows : WinRM, OpenSSH et collections ansible.windows

25 min de lecture

Logo Ansible

Ansible n'est pas qu'un outil Linux, il pilote très bien Windows Server 2016+, Windows 10/11, à condition de choisir le bon transport de connexion : WinRM (historique, intégré AD) ou OpenSSH (moderne, plus simple).

Cette page donne les prérequis, le choix entre les deux protocoles, le premier win_ping, et la cartographie des collections Ansible Windows.

  • Choisir entre WinRM et OpenSSH selon votre contexte.
  • Activer WinRM ou OpenSSH côté Windows.
  • Configurer un inventaire Ansible pour cibler Windows.
  • Tester la connexion avec win_ping.
  • Identifier les modules win_* essentiels.
CôtéExigences
Hôte WindowsWindows Server 2016+ ou Windows 10/11, PowerShell 5.1+, .NET 4.0+
Contrôleur AnsibleLinux/macOS avec Python 3.10+, collections ansible.windows et community.windows
Fenêtre de terminal
ansible-galaxy collection install ansible.windows community.windows
CritèreWinRMOpenSSH
InstallationNatif WindowsOptionnel à activer
ConfigurationComplexe (HTTPS, ACL, certificats)Simple
Port5985 (HTTP), 5986 (HTTPS)22
AuthentificationBasic, NTLM, Kerberos, CredSSPMot de passe, clé SSH, GSSAPI
Compatibilité modules100% des modules win_*Partielle, certains modules limités
Active DirectoryIntégration nativeMoins intégré
Cas d'usageEntreprise + ADLab, projet rapide, Windows moderne

Règle pragmatique : WinRM si vous êtes en environnement AD avec Kerberos ou si vous avez besoin de tous les modules. OpenSSH sur Windows 10/11 ou Server 2019+ pour un setup léger.

Sur la machine Windows, ouvrir PowerShell en administrateur :

Fenêtre de terminal
Enable-PSRemoting -Force

Cela : configure un listener HTTP sur 5985, démarre le service WinRM, ouvre le pare-feu. Pour la prod, ajouter un listener HTTPS sur 5986 (certificat requis).

Vérifier :

Fenêtre de terminal
winrm enumerate winrm/config/Listener

Sur Windows 10/11 ou Server 2019+ :

Fenêtre de terminal
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

Forcer PowerShell comme shell par défaut (recommandé pour Ansible) :

Fenêtre de terminal
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
[windows]
192.168.1.10
[windows:vars]
ansible_connection=winrm
ansible_user=Administrator
ansible_password=MotDePasseSecurise
ansible_port=5986
ansible_winrm_transport=basic
ansible_winrm_server_cert_validation=ignore

ansible_winrm_server_cert_validation=ignore → uniquement pour le lab. En prod, déployer un certificat de confiance et passer à validate.

[windows]
192.168.1.10
[windows:vars]
ansible_connection=ssh
ansible_user=ansibleuser
ansible_shell_type=powershell
ansible_ssh_common_args='-o StrictHostKeyChecking=no'

ansible_shell_type=powershell est critique, sans ça, Ansible essaie d'envoyer du bash et échoue silencieusement.

Le module ansible.windows.win_ping est l'équivalent Windows de ansible.builtin.ping et le premier geste de toute mise en place : il vérifie que la connexion (WinRM ou OpenSSH) aboutit et que PowerShell répond sur la cible. Ne tentez pas ansible.builtin.ping sur un hôte Windows, il dépend d'un Python installé côté cible et échouera sans rapport avec votre configuration.

Fenêtre de terminal
ansible windows -i inventory.ini -m win_ping

Sortie attendue :

192.168.1.10 | SUCCESS => {
"changed": false,
"ping": "pong"
}

Si échec : vérifier le pare-feu Windows, le service WinRM/sshd, et l'authentification (mot de passe ou clé).

DomaineModulesUsage
Utilisateurswin_user, win_groupComptes et groupes locaux
Fichierswin_copy, win_file, win_templateCopie, permissions, templates
Serviceswin_serviceDémarrer, arrêter, configurer
Registrewin_regedit, win_reg_statLecture/écriture du registre
Rôles Windowswin_featureIIS, Hyper-V, Active Directory
Mises à jourwin_updatesPatches Windows Update
Pare-feuwin_firewall_ruleRègles entrantes/sortantes
Tâches planifiéeswin_scheduled_taskCron Windows
Exécutionwin_command, win_shellÉquivalent command / shell
Inspectionwin_statÉquivalent stat

Le préfixe win_ est votre repère : tous les modules win_* sont dédiés Windows et envoient du PowerShell sous le capot.

Collection community.windows, pour aller plus loin

Section intitulée « Collection community.windows, pour aller plus loin »

La collection ansible.windows couvre le socle du système, comptes, services, registre, fonctionnalités. Tout ce qui relève de l'outillage tiers ou des stratégies de sécurité vit dans community.windows, installée par la même commande ansible-galaxy. Les cinq entrées ci-dessous sont celles qu'on cherche le plus souvent en premier.

DomaineModuleUsage
Chocolateywin_chocolateyInstallation de paquets via Chocolatey
PowerShellwin_psmoduleModules PSGallery
PATHwin_pathAjout/retrait dans PATH
Raccourciswin_shortcutFichiers .lnk
Stratégieswin_account_policy, win_audit_policy_systemAudit, mots de passe

Les deux premières lignes se règlent côté Windows, service arrêté ou authentification refusée, et se diagnostiquent avec les commandes PowerShell citées plus haut. Les trois suivantes tiennent au transport retenu : interpréteur non déclaré, module qui réclame un rebond vers une seconde machine, ou copie volumineuse que ce transport traite mal.

SymptômeCauseFix
win_ping timeoutPare-feu ou service WinRM/sshd arrêtéVérifier Get-Service WinRM ou Get-Service sshd
Authentication failureMauvais user/password ou Kerberos non configuréTester avec basic avant Kerberos
OpenSSH fonctionne en CLI mais pas via Ansibleansible_shell_type non définiAjouter ansible_shell_type=powershell
Certains modules échouent en SSHModules nécessitant CredSSP/double-hopRepasser à WinRM avec negotiate ou kerberos
Lenteur sur win_copy (gros fichiers)Limitation WinRM connuePréférer OpenSSH (scp natif)

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • WinRM = entreprise + AD + tous les modules. OpenSSH = lab + Windows moderne + simplicité.
  • ansible-galaxy collection install ansible.windows community.windows = prérequis.
  • win_ping = test d'or pour valider la connexion.
  • Préfixe win_ sur tous les modules Windows.
  • ansible_shell_type=powershell indispensable en mode SSH.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens ce site gratuitement, sans publicité, sans profilage et sans compte à créer. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn