Setup openssh (prerequisites)
Before using ansible to manage windows, make sure that openssh is installed and enabled. If not, you can use this powershell script to do so:
$sshServer = Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
if ($sshServer.State -ne 'Installed') {
Write-Host "Installing OpenSSH Server..."
Add-WindowsCapability -Online -Name $sshServer.Name
} else {
Write-Host "OpenSSH Server is already installed."
}
# Set default shell to powershell for ansible
if (-not (Get-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -ErrorAction SilentlyContinue)) {
Write-Host "Set default shell to powershell..."
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShellCommandOption -Value "/c" -PropertyType String -Force
} else {
Write-Host "Default shell already configured."
}
# Optional: Reconfigure the firewall to allow SSH traffic to port 2222 (default one is 22)
Write-Host "Configuring firewall to allow SSH traffic..."
Remove-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -Description "Inbound rule for OpenSSH SSH Server (sshd)" -DisplayName "OpenSSH Server (sshd)" -Group "OpenSSH Server" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222
# Start the OpenSSH server service
Write-Host "Starting OpenSSH Server service..."
Restart-Service sshd
## Set the OpenSSH server service to start automatically on boot
Write-Host "Configuring OpenSSH Server service to start automatically..."
Set-Service -Name sshd -StartupType 'Automatic'
Write-Host "OpenSSH setup completed."
Run one command
ansible -m win_shell -a "hostname" win_group
That’s it!
Playbook exemples to update your windows hosts configuration
Setup autologon
ansible-playbook setup_windows.yaml --tags=autologon
Playbook setup_windows.yaml
:
- name: Setup aulogon
hosts: win_group
strategy: free
gather_facts: false
tags: autologon
tasks:
- ansible.windows.win_powershell:
script: |
[CmdletBinding()]
param (
[String]
$RegistryPath,
[String]
$Domain,
[String]
$User,
[String]
$Pass
)
Set-ItemProperty $RegistryPath 'AutoAdminLogon' -Value "1" -Type String
Set-ItemProperty $RegistryPath 'DefaultDomainName' -Value "$Domain" -Type String
Set-ItemProperty $RegistryPath 'DefaultUsername' -Value "$User" -type String
Set-ItemProperty $RegistryPath 'DefaultPassword' -Value "$Pass" -type String
Get-ItemProperty $RegistryPath
parameters:
RegistryPath: 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon'
Domain: 'YOUR-DOMAIN'
User: 'your_name'
Pass: "your_password"
register: autologon_postchange
- debug:
var: autologon_postchange