Jak používat Ansible ke správě počítačů Windows

Ansible je populární bezplatný systém správy konfigurace s otevřeným zdrojovým kódem používaný především ke správě hostitelů Linuxu. Tento článek popisuje, jak používat Ansible ke vzdálené správě konfigurace serverů Windows a hostitelů pracovních stanic.

Obsah:

Konfigurace hostitelů Windows pro Ansible

Ansible vám umožňuje vzdáleně spravovat hostitele Windows se všemi podporovanými verzemi OS, počínaje Windows 7/Windows Server 2008 a až po nejnovější Windows 11/Windows Server 2022. Ve Windows musíte mít nainstalované PowerShell 3.0 (nebo novější) a .NET 4.0+.

Zkontrolujte verzi PowerShell a .Net Framework v systému Windows a v případě potřeby je aktualizujte (viz Jak aktualizovat PowerShell ve Windows).

Ansible používá WinRM pro připojení k operačnímu systému Windows. Proto musíte povolit a nakonfigurovat naslouchání WinRM na všech spravovaných hostitelích Windows.

Ansible 2.8 a novější má experimentální možnost vzdálené správy klientů Windows 10/11 a Windows Server 2019/2022 prostřednictvím vestavěného serveru OpenSSH.

  • Zásady skupiny lze použít ke konfiguraci služby WinRM na počítačích domény v AD;
  • Spuštěním následujícího příkazu PowerShell povolte WinRM na samostatném hostiteli Windows:Enable-PSRemoting –Force

Pokud máte na hostitelích se systémem Windows povolenou a nakonfigurovanou službu WinRM, zkontrolujte, zda je port TCP/5985 nebo TCP/5986 (pokud používáte HTTPS) dostupný ze serveru Ansible pro správu:

$ nc -zv 192.168.13.122 5985

Poté musíte zvolit metodu ověření. To bude záviset na prostředí, ve kterém Ansible používáte.

  • Pro prostředí samostatného počítače nebo pracovní skupiny můžete použít HTTPS pro WinRM s certifikáty s vlastním podpisem a ověřováním pomocí místního účtu Windows s oprávněními správce. Pro rychlou konfiguraci hostitele Windows můžete použítConfigureRemotingForAnsible.ps1(https://github.com/ansible/ansible-documentation/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1);
  • V mém případě jsou všichni hostitelé Windows připojeni k doméně Active Directory, takže k ověření u Ansible použiji svůj účet AD. To vyžaduje konfiguraci ověřování Kerberos na serveru Ansible (viz níže).

V tomto okamžiku předpokládáme, že Ansible je již nainstalován na vašem hostiteli správy Linuxu.

Nainstalujte balíčky požadované pro ověřování Kerberos:

  • Pro RHEL/Rocky Linux/CentOS prostřednictvím správce balíčků yum/dnf:
    $ sudo yum -y install python-devel krb5-devel krb5-libs krb5-workstation
  • Pro Ubuntu/Debian:
    $ sudo apt-get -y install python-dev libkrb5-dev krb5-user

Poté nainstalujte balíček Python přes pip:

$ sudo pip3 install requests-kerberos

Zadejte nastavení připojení pro vaši doménu v souboru Kerberos conf:

$ 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

Zkontrolujte, zda se můžete ověřit ke své doméně AD a získat lístek Kerberos:

kinit -C [email protected]
Zadejte heslo uživatele AD a zjistěte, zda byl lístek přijat.

klist

Správa hostitelů Windows pomocí Ansible

Dále přidejte všechny své hostitele Windows do souboru inventáře Ansible:

$ 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

Zkontrolujte, zda jsou všichni vaši hostitelé Windows (můj seznam obsahuje dva Windows Server 2019 a jeden počítač s Windows 11) přístupní z Ansible:

$ ansible windows_all -m win_ping

Hostitelé mohou vrátit chybu:

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

Důvodem je, že WinRM v tomto příkladu používá k připojení HTTP místo HTTPS. Chcete-li chybu ignorovat, musíte povolit nešifrovaný provoz na hostitelích Windows

Set-Item -Path WSMan:localhostServiceAllowUnencrypted -Value true

Nyní můžete použít Ansible ke spuštění libovolného příkazu na všech vašich hostitelích Windows. Například chci resetovat mezipaměť DNS na všech svých počítačích se systémem Windows:

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

Příklady Ansible Playbook pro správu Windows

Vaši hostitelé Windows jsou nyní připraveni spustit Ansible playbooky.

Například musíte spustit skript PowerShell na všech hostitelích pomocí Ansible (v tomto příkladu použijeme PowerShell k získání aktuálního nastavení IP nebo DNS na hostitelích). Vytvořte soubor playbooku:

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

Spusťte příručku:

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

V tomto příkladu byla příručka úspěšně spuštěna na všech hostitelích Windows a byla vrácena aktuální nastavení DNS.

Podívejme se na některé typické příručky Ansible pro standardní úlohy správy hostitelů Windows.

Zkopírujte soubor:

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

Vytvořte soubor:

Další informace:Globální výpadek: Aktualizace CrowdStrike havaruje počítače se systémem Windows – klíčové informace a řešení

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

Smazat soubor:

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

Vytvořte parametr registru:

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

Nainstalujte program od MSI:

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

Spusťte službu Windows:

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

Instalace role Windows Server:

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

Otevřete port v bráně Windows Defender Firewall:

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

Spusťte skript PowerShellu:

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

V tomto článku jste se naučili, jak spravovat konfiguraci hostitelů Windows pomocí Ansible. Pokud vaši hostitelé Windows nejsou připojeni k doméně Active Directory (jsou v pracovní skupině), pak vzdálená správa konfigurace hostitelů Windows pomocí Ansible může být dobrou alternativou ke konfiguraci pomocí zásad skupiny domény.

Ansible můžete také nainstalovat do podsystému Windows pro Linux (WSL). To by vám umožnilo spouštět playbooky bez nutnosti nasazení samostatného hostitele Linuxu pro Ansible.

Related Posts