Windows Makinelerini Yönetmek İçin Ansible Nasıl Kullanılır


Ansible, öncelikle Linux ana bilgisayarlarını yönetmek için kullanılan popüler ücretsiz açık kaynaklı konfigürasyon yönetim sistemidir. Bu makalede, Windows sunucularının ve iş istasyonu ana bilgisayarlarının yapılandırmasını uzaktan yönetmek için Ansible'ın nasıl kullanılacağı açıklanmaktadır.

Ansible için Windows Ana Bilgisayarlarını Yapılandırma

Ansible, Windows 7/Windows Server 2008'den başlayarak en son Windows 11/Windows Server 2022'ye kadar desteklenen tüm işletim sistemi sürümlerine sahip Windows ana bilgisayarlarını uzaktan yönetmenize olanak tanır. Windows'ta PowerShell 3.0 (veya daha yenisi) ve .NET 4.0'a sahip olmanız gerekir. + yüklü.

Windows'ta PowerShell ve .Net Framework sürümünü kontrol edin ve gerekiyorsa bunları güncelleyin (bkz. Windows'ta PowerShell nasıl güncelleştirilir).

Ansible, Windows işletim sistemine bağlanmak için WinRM'yi kullanır. Bu nedenle, yönetilen tüm Windows ana bilgisayarlarında WinRM dinleyicisini etkinleştirmeniz ve yapılandırmanız gerekir.

Ansible 2.8 ve daha yenisi, Windows 10/11 ve Windows Server 2019/2022 istemcilerini yerleşik OpenSSH sunucusu aracılığıyla uzaktan yönetmek için deneysel bir seçeneğe sahiptir.

  • Grup İlkeleri, AD'deki etki alanı bilgisayarlarında WinRM'yi yapılandırmak için kullanılabilir;

  • Tek başına bir Windows ana bilgisayarında WinRM'yi etkinleştirmek için aşağıdaki PowerShell komutunu çalıştırın:

    Enable-PSRemoting -Force

Windows ana bilgisayarlarında WinRM'yi etkinleştirdiyseniz ve yapılandırdıysanız, TCP/5985 veya TCP/5986 bağlantı noktasının (HTTPS kullanılıyorsa) yönetim Ansible sunucusundan erişilebilir olduğunu kontrol edin:

$ nc -zv 192.168.13.122 5985

Daha sonra kimlik doğrulama yöntemini seçmeniz gerekir. Bu, Ansible'ı kullandığınız ortama bağlı olacaktır.

  • Bağımsız bir bilgisayar veya çalışma grubu ortamı için, WinRM için HTTPS'yi kendinden imzalı sertifikalarla ve yönetici ayrıcalıklarına sahip yerel bir Windows hesabı kullanarak kimlik doğrulamayla kullanabilirsiniz. Bir Windows ana bilgisayarının hızlı yapılandırılması için ConfigureRemotingForAnsible.ps1 (https://github.com/ansible/ansible-documentation/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 ) komutunu kullanabilirsiniz;

  • Benim durumumda, tüm Windows ana bilgisayarları Active Directory etki alanına katılmıştır, bu nedenle Ansible'da kimlik doğrulaması yapmak için AD hesabımı kullanacağım. Bu, Ansible sunucusunda Kerberos kimlik doğrulamasının yapılandırılmasını gerektirir (aşağıya bakın).

Bu noktada Ansible'ın Linux yönetim ana makinenizde zaten kurulu olduğunu varsayıyoruz.

Kerberos kimlik doğrulaması için gereken paketleri yükleyin:

  • RHEL/Rocky Linux/CentOS için yum/dnf paket yöneticisi aracılığıyla:

    $ sudo yum -y install python-devel krb5-devel krb5-libs krb5-workstation
  • Ubuntu/Debian için:

    $ sudo apt-get -y install python-dev libkrb5-dev krb5-user

Ardından Python paketini pip aracılığıyla yükleyin:

$ sudo pip3 install requests-kerberos

Kerberos conf dosyasında alan adınız için bağlantı ayarlarını belirtin:

$ 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.a-d.loc
    kdc = dc01.a-d.loc
  }
[domain_realm]
 a-d.loc = WOSHUB.LOC
 .WOSHUB.LOC = WOSHUB.LOC

AD etki alanınızda kimlik doğrulaması yapıp yapamadığınızı kontrol edin ve bir Kerberos bileti alın:

kinit -C [email 

AD kullanıcı şifrenizi girin ve biletin alınıp alınmadığına bakın.

klist

Ansible ile Windows Ana Bilgisayarlarını Yönetme

Ardından tüm Windows ana bilgisayarlarınızı Ansible envanter dosyasına ekleyin:

$ sudo mcedit /etc/ansible/hosts
mun-rds1.a-d.loc
mun-dc02.a-d.loc
wks-test1.a-d.loc
[windows_all:vars]
ansible_port=5985
[email 
ansible_connection=winrm
ansible_winrm_transport=kerberos
ansible_winrm_scheme=http
ansible_winrm_server_cert_validation=ignore

Tüm Windows ana bilgisayarlarınızın (listemde iki Windows Server 2019 ve bir Windows 11 makinesi bulunmaktadır) Ansible'dan erişilebilir olup olmadığını kontrol edin:

$ ansible windows_all -m win_ping

Toplantı sahipleri bir hata döndürebilir:

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

Bunun nedeni, WinRM'nin bu örnekte bağlanmak için HTTPS yerine HTTP kullanmasıdır. Hatayı yok saymak için Windows ana bilgisayarlarında şifrelenmemiş trafiğe izin vermelisiniz

Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value true

Artık tüm Windows ana bilgisayarlarınızda isteğe bağlı bir komut çalıştırmak için Ansible'ı kullanabilirsiniz. Örneğin, tüm Windows makinelerimde DNS önbelleğini sıfırlamak istiyorum:

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

Windows Yönetimi için Ansible Playbook Örnekleri

Windows ana bilgisayarlarınız artık Ansible playbook'larını çalıştırmaya hazır.

Örneğin, Ansible'ı kullanarak tüm ana bilgisayarlarda bir PowerShell betiği çalıştırmanız gerekir (bu örnekte, ana bilgisayarlardaki geçerli IP veya DNS ayarlarını almak için PowerShell'i kullanacağız). Bir başucu kitabı dosyası oluşturun:

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

Başucu kitabını çalıştırın:

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

Bu örnekte, oynatma kitabı tüm Windows ana bilgisayarlarında başarıyla yürütüldü ve geçerli DNS ayarları döndürüldü.

Standart Windows ana bilgisayar yönetimi görevleri için bazı tipik Ansible oyun kitaplarına bir göz atalım.

Dosya kopyalama:

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

Dosya oluşturun:

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

Dosyayı silme:

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

Bir kayıt defteri parametresi oluşturun:

- name: Create reg dword 
  win_regedit: 
    path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection
    name: AllowTelemetry
    data: 0
    type: dword

MSI'dan bir program yükleyin:

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

Bir Windows hizmeti çalıştırın:

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

Bir Windows Sunucu rolü yükleyin:

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

Windows Defender Güvenlik Duvarı'nda bir bağlantı noktası açın:

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

Bir PowerShell betiği çalıştırın:

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

Bu makale boyunca Windows ana bilgisayarlarınızın yapılandırmasını Ansible aracılığıyla nasıl yöneteceğinizi öğrendiniz. Windows ana bilgisayarlarınız bir Active Directory etki alanına katılmamışsa (bir çalışma grubunda yer alıyorlarsa), Windows ana bilgisayarlarının Ansible kullanılarak uzaktan yapılandırma yönetimi, etki alanı Grup İlkeleri kullanılarak yapılan yapılandırmaya iyi bir alternatif olabilir.

Ansible'ı Linux için Windows alt sistemine (WSL) de yükleyebilirsiniz. Bu, Ansible için ayrı bir Linux ana bilgisayarı dağıtmaya gerek kalmadan oyun kitaplarını çalıştırmanıza olanak tanır.

İlgili makaleler