Hur man använder Ansible för att hantera Windows-maskiner

Ansible är det populära gratis konfigurationshanteringssystemet med öppen källkod som främst används för att hantera Linux-värdar. Den här artikeln beskriver hur du använder Ansible för att fjärrstyra konfigurationen av Windows-servrar och arbetsstationsvärdar.

Innehåll:

Konfigurera Windows Hosts för Ansible

Ansible låter dig fjärrhantera Windows-värdar med alla operativsystem som stöds, från Windows 7/Windows Server 2008 och upp till den senaste Windows 11/Windows Server 2022. På Windows måste du ha PowerShell 3.0 (eller nyare) och .NET 4.0+ installerade.

Kontrollera versionen av PowerShell och .Net Framework på Windows och uppdatera dem vid behov (se Hur man uppdaterar PowerShell i Windows).

Ansible använder WinRM för att ansluta till Windows operativsystem. Därför måste du aktivera och konfigurera WinRM-lyssnaren på alla hanterade Windows-värdar.

Ansible 2.8 och nyare har ett experimentellt alternativ för att fjärrhantera Windows 10/11- och Windows Server 2019/2022-klienter via den inbyggda OpenSSH-servern.

  • Grupppolicyer kan användas för att konfigurera WinRM på domändatorer i AD;
  • Kör följande PowerShell-kommando för att aktivera WinRM på en fristående Windows-värd:Enable-PSRemoting –Force

Om du har WinRM aktiverat och konfigurerat på Windows-värdar, kontrollera att TCP/5985- eller TCP/5986-porten (om du använder HTTPS) är tillgänglig från hanteringsservern Ansible:

$ nc -zv 192.168.13.122 5985

Sedan måste du välja autentiseringsmetod. Detta beror på miljön du använder Ansible.

  • För en fristående dator eller arbetsgruppsmiljö kan du använda HTTPS för WinRM med självsignerade certifikat och autentisering med ett lokalt Windows-konto med administratörsbehörighet. För snabb konfiguration av en Windows-värd kan du användaConfigureRemotingForAnsible.ps1(https://github.com/ansible/ansible-documentation/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1);
  • I mitt fall är alla Windows-värdar anslutna till Active Directory-domänen, så jag använder mitt AD-konto för att autentisera till Ansible. Detta kräver att Kerberos-autentisering konfigureras på Ansible-servern (se nedan).

Vid det här laget antar vi att Ansible redan är installerat på din Linux-hanteringsvärd.

Installera paketen som krävs för Kerberos-autentisering:

  • För RHEL/Rocky Linux/CentOS via yum/dnf-pakethanteraren:
    $ sudo yum -y install python-devel krb5-devel krb5-libs krb5-workstation
  • För Ubuntu/Debian:
    $ sudo apt-get -y install python-dev libkrb5-dev krb5-user

Installera sedan Python-paketet via pip:

$ sudo pip3 install requests-kerberos

Ange anslutningsinställningarna för din domän i Kerberos conf-fil:

$ 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

Kontrollera att du kan autentisera till din AD-domän och få en Kerberos-biljett:

kinit -C [email protected]
Ange ditt AD-användarlösenord och se om biljetten har tagits emot.

klist

Hantera Windows-värdar med Ansible

Lägg sedan till alla dina Windows-värdar till Ansible-inventeringsfilen:

$ 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

Kontrollera att alla dina Windows-värdar (min lista inkluderar två Windows Server 2019 och en Windows 11-dator) är tillgängliga från Ansible:

$ ansible windows_all -m win_ping

Värdar kan returnera ett fel:

"msg": "kerberos: Bad HTTP response returned from server. Code 500",
"unreachable": true

Detta beror på att WinRM i detta exempel använder HTTP istället för HTTPS för att ansluta. För att ignorera felet måste du tillåta okrypterad trafik på Windows-värdar

Set-Item -Path WSMan:localhostServiceAllowUnencrypted -Value true

Nu kan du använda Ansible för att köra ett godtyckligt kommando på alla dina Windows-värdar. Till exempel vill jag återställa DNS-cachen på alla mina Windows-maskiner:

$ ansible windows_all -m win_shell -a "ipconfig /flushdns"

Ansible Playbook-exempel för Windows-administration

Dina Windows-värdar är nu redo att köra Ansible playbooks.

Till exempel måste du köra ett PowerShell-skript på alla värdar som använder Ansible (i det här exemplet kommer vi att använda PowerShell för att få de aktuella IP- eller DNS-inställningarna på värdarna). Skapa en spelboksfil:

$ 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:

Kör spelboken:

$ ansible-playbook /etc/ansible/playbooks/win-exec-powershell.yml

I det här exemplet kördes spelboken framgångsrikt på alla Windows-värdar och de aktuella DNS-inställningarna returnerades.

Låt oss ta en titt på några typiska Ansible-spelböcker för vanliga Windows-värdhanteringsuppgifter.

Se även:Fasta virtuella maskiner har inget fel på internetåtkomst

Kopiera en fil:

  - name: Copy a single file
    win_copy:
      src: /home/sysops/files/test.ps1"
      dest: C:Temptest.ps1

Skapa en fil:

- name: Create file
  win_file:
    path: C:Tempfile.txt
    state: touch

Ta bort en fil:

- name: Delete file
  win_file:
    path: C:Tempfile.txt
    state: absent

Skapa en registerparameter:

- name: Create reg dword 
  win_regedit: 
    path: HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesDataCollection
    name: AllowTelemetry
    data: 0
    type: dword

Installera ett program från MSI:

- name: Install MSI package
  win_package:
    path: C:Distradobereader.msi
    arguments:
      - /install
      - /passive
      - /norestart

Kör en Windows-tjänst:

- name: Run Windows Service
  win_service: 
    name: wuauserv
    state: started

Installera en Windows Server-roll:

  - name: Install Windows Feature
    win_feature:
      name: SNMP-Service
      state: present

Öppna en port i Windows Defender-brandväggen:

- name: Open SSH Port
  win_firewall_rule:
    name: port 22
    localport: 22
    action: allow
    direction: in
    protocol: tcp
    state: present
    enabled: yes

Kör ett PowerShell-skript:

- name: Run PowerShell Script
  win_command: powershell.exe -ExecutionPolicy ByPass -File C:/temp/powershellscript.ps1

Genom hela den här artikeln har du lärt dig hur du hanterar konfigurationen av dina Windows-värdar genom Ansible. Om dina Windows-värdar inte är anslutna till en Active Directory-domän (de är i en arbetsgrupp) kan fjärrkonfigurationshantering av Windows-värdar med Ansible vara ett bra alternativ till konfiguration med domängrupppolicyer.

Du kan också installera Ansible i Windows-undersystemet för Linux (WSL). Detta skulle tillåta dig att köra playbooks utan att behöva distribuera en separat Linux-värd för Ansible.

Related Posts