Ansible er det populære gratis open source-konfigurasjonsstyringssystemet som hovedsakelig brukes til å administrere Linux-verter. Denne artikkelen beskriver hvordan du bruker Ansible til å eksternt administrere konfigurasjonen av Windows-servere og arbeidsstasjonsverter.
Innhold:
- Konfigurering av Windows Hosts for Ansible
- Administrere Windows-verter med Ansible
- Ansible Playbook-eksempler for Windows-administrasjon
Konfigurering av Windows Hosts for Ansible
Ansible lar deg fjernadministrere Windows-verter med alle støttede OS-versjoner, fra Windows 7/Windows Server 2008 og opp til den nyeste Windows 11/Windows Server 2022. På Windows må du ha PowerShell 3.0 (eller nyere) og .NET 4.0+ installert.
Sjekk versjonen av PowerShell og .Net Framework på Windows og oppdater dem om nødvendig (se Hvordan oppdatere PowerShell i Windows).
Ansible bruker WinRM for å koble til Windows-operativsystemet. Derfor må du aktivere og konfigurere WinRM-lytteren på alle administrerte Windows-verter.
Ansible 2.8 og nyere har et eksperimentelt alternativ for å eksternt administrere Windows 10/11- og Windows Server 2019/2022-klienter via den innebygde OpenSSH-serveren.
- Gruppepolicyer kan brukes til å konfigurere WinRM på domenedatamaskiner i AD;
- Kjør følgende PowerShell-kommando for å aktivere WinRM på en frittstående Windows-vert:
Enable-PSRemoting –Force
Hvis du har WinRM aktivert og konfigurert på Windows-verter, kontroller at TCP/5985- eller TCP/5986-porten (hvis du bruker HTTPS) er tilgjengelig fra Ansible-administrasjonsserveren:
$ nc -zv 192.168.13.122 5985

Deretter må du velge autentiseringsmetoden. Dette vil avhenge av miljøet du bruker Ansible.
- For en frittstående datamaskin eller arbeidsgruppemiljø kan du bruke HTTPS for WinRM med selvsignerte sertifikater og autentisering ved å bruke en lokal Windows-konto med administratorrettigheter. For rask konfigurasjon av en Windows-vert kan du brukeConfigureRemotingForAnsible.ps1(https://github.com/ansible/ansible-documentation/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1);
- I mitt tilfelle er alle Windows-verter koblet til Active Directory-domenet, så jeg bruker AD-kontoen min til å autentisere til Ansible. Dette krever konfigurering av Kerberos-autentisering på Ansible-serveren (se nedenfor).
På dette tidspunktet antar vi at Ansible allerede er installert på Linux-administrasjonsverten.
Installer pakkene som kreves for Kerberos-autentisering:
- For RHEL/Rocky Linux/CentOS via yum/dnf-pakkebehandling:
$ sudo yum -y install python-devel krb5-devel krb5-libs krb5-workstation - For Ubuntu/Debian:
$ sudo apt-get -y install python-dev libkrb5-dev krb5-user
Installer deretter Python-pakken via pip:
$ sudo pip3 install requests-kerberos
Angi tilkoblingsinnstillingene for domenet ditt i Kerberos conf-filen:
$ sudo mcedit /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = WOSHUB.LOC
[realms]
WOSHUB.LOC = {
admin_server = dc01.woshub.loc
kdc = dc01.woshub.loc
}
[domain_realm]
woshub.loc = WOSHUB.LOC
.WOSHUB.LOC = WOSHUB.LOC
Sjekk at du kan autentisere deg til AD-domenet ditt og få en Kerberos-billett:
kinit -C [email protected]
Skriv inn ditt AD-brukerpassord og se om billetten er mottatt.
klist


Administrere Windows-verter med Ansible
Deretter legger du til alle Windows-vertene dine i Ansible-inventarfilen:
$ sudo mcedit /etc/ansible/hosts
mun-rds1.woshub.loc mun-dc02.woshub.loc wks-test1.woshub.loc [windows_all:vars] ansible_port=5985 [email protected] ansible_connection=winrm ansible_winrm_transport=kerberos ansible_winrm_scheme=http ansible_winrm_server_cert_validation=ignore
Sjekk at alle Windows-vertene dine (min liste inkluderer to Windows Server 2019 og én Windows 11-maskin) er tilgjengelige fra Ansible:
$ ansible windows_all -m win_ping


Verter kan returnere en feil:
"msg": "kerberos: Bad HTTP response returned from server. Code 500", "unreachable": true


Dette er fordi WinRM i dette eksemplet bruker HTTP i stedet for HTTPS for å koble til. For å ignorere feilen må du tillate ukryptert trafikk på Windows-verter
Set-Item -Path WSMan:localhostServiceAllowUnencrypted -Value true
Nå kan du bruke Ansible til å kjøre en vilkårlig kommando på alle Windows-vertene dine. For eksempel vil jeg tilbakestille DNS-cachen på alle mine Windows-maskiner:
$ ansible windows_all -m win_shell -a "ipconfig /flushdns"


Ansible Playbook-eksempler for Windows-administrasjon
Windows-vertene dine er nå klare til å kjøre Ansible playbooks.
For eksempel må du kjøre et PowerShell-skript på alle verter som bruker Ansible (i dette eksemplet vil vi bruke PowerShell for å få gjeldende IP- eller DNS-innstillinger på vertene). Opprett en playbook-fil:
$ sudo mcedit /etc/ansible/playbooks/win-exec-powershell.yml
---
- name: win_powershell_exec
hosts: windows_all
tasks:
- name: check DNS
win_shell: |
Get-DnsClientServerAddress -InterfaceIndex (Get-NetAdapter|where Status -eq "Up").ifindex -ErrorAction SilentlyContinue
register: command_output
- name: command output
ansible.builtin.debug:


Kjør spilleboken:
$ ansible-playbook /etc/ansible/playbooks/win-exec-powershell.yml
I dette eksemplet ble spilleboken utført på alle Windows-vertene og de gjeldende DNS-innstillingene ble returnert.


La oss ta en titt på noen typiske Ansible-spillebøker for standard Windows-vertsadministrasjonsoppgaver.
Kopier en fil:
- name: Copy a single file
win_copy:
src: /home/sysops/files/test.ps1"
dest: C:Temptest.ps1
Lag en fil:
Lær mer:Globalt avbrudd: CrowdStrike-oppdatering krasjer Windows-maskiner – nøkkelinformasjon og løsninger
- name: Create file
win_file:
path: C:Tempfile.txt
state: touch
Slett en fil:
- name: Delete file
win_file:
path: C:Tempfile.txt
state: absent
Opprett en registerparameter:
- name: Create reg dword
win_regedit:
path: HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesDataCollection
name: AllowTelemetry
data: 0
type: dword
Installer et program fra MSI:
- name: Install MSI package
win_package:
path: C:Distradobereader.msi
arguments:
- /install
- /passive
- /norestart
Kjør en Windows-tjeneste:
- name: Run Windows Service
win_service:
name: wuauserv
state: started


Installer en Windows Server-rolle:
- name: Install Windows Feature
win_feature:
name: SNMP-Service
state: present
Åpne en port i Windows Defender-brannmuren:
- name: Open SSH Port
win_firewall_rule:
name: port 22
localport: 22
action: allow
direction: in
protocol: tcp
state: present
enabled: yes
Kjør et PowerShell-skript:
- name: Run PowerShell Script win_command: powershell.exe -ExecutionPolicy ByPass -File C:/temp/powershellscript.ps1
Gjennom denne artikkelen har du lært hvordan du administrerer konfigurasjonen av Windows-vertene dine gjennom Ansible. Hvis Windows-vertene dine ikke er koblet til et Active Directory-domene (de er i en arbeidsgruppe), kan ekstern konfigurasjonsadministrasjon av Windows-verter ved hjelp av Ansible være et godt alternativ til konfigurasjon ved hjelp av domenegruppepolicyer.
Du kan også installere Ansible i Windows-undersystemet for Linux (WSL). Dette vil tillate deg å kjøre playbooks uten å måtte distribuere en separat Linux-vert for Ansible.













