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