Aller au contenu
Infrastructure as Code medium

Ansible Windows : WinRM, OpenSSH et collections ansible.windows

6 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.

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 »
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
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)
  • 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 +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn