Управление конфигурацией Windows через Ansible

В этой статье мы рассмотрим, как удаленно управлять хостами с Windows через популярную систему управления конфигурациями Ansible. Мы предполагаем, что Ansible уже установлен на вашем хосте Linux .

Подготовка Windows к удаленному управления через Ansible

Ansible позволяет удаленно управлять хостами Windows со всеми поддерживаемым версиями ОС, начиная с Windows 7/Windows Server 2008 и до современных Windows 11/Windows Server 2022. В Windows должен быть установлен PowerShell 3.0 (или выше) и NET 4.0+.

Ansible использует WinRM для подключения к Windows. Поэтому вам нужно включить и настроить WinRM listener на всех управляемых хостах.

В Ansible 2.8 и выше доступна экспериментальная опция удаленного управления клиентами Windows 10 и Windows Serve 2019 через встроенный OpenSSH сервер .

Если WinRM включен и настроен на хостах Windows, проверьте что с сервера Ansible на ваших серверах доступен порт TCP/5985 или TCP/5986 (если используется HTTPS).

$ nc -zv 192.168.13.122 5985

В зависимости от того. в какой среде вы будете использовать Ansible, вам нужно выбрать способ аутентификации.

  • Для отдельно-стоящего компьютера или рабочей группы можно использовать HTTPS для WinRM с самоподписанными сертификатами с аутентификацией под локальной учетной записью Windows с правами администратора. Для быстрой настройки хоста Windows можно использовать готовый скрипт ConfigureRemotingForAnsible.ps1 ( https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 );
  • В моем случае все хосты Windows находятся в домене Active Directory, поэтому я буду использовать учетную запись AD для аутентификации через Ansible. В этом случае нужно настроить Kerberos аутентификацию на сервере Ansible (рассмотрено далее).

Установите необходимые пакеты для Kerberos аутентификации:

  • В RHEL/Rocky Linux/CentOS через менеджер пакетов yum/dnf :
    $ sudo yum -y install python-devel krb5-devel krb5-libs krb5-workstation
  • В Ubuntu/Debian:
    $ sudo apt-get -y install python-dev libkrb5-dev krb5-user

Теперь установите пакет для python через pip:

$ sudo pip3 install requests-kerberos

Укажите настройки подключения к вашему домену в файле:

$ sudo mcedit /etc/krb5.conf

_x000D_[logging]_x000D_ default = FILE:/var/log/krb5libs.log_x000D_ kdc = FILE:/var/log/krb5kdc.log_x000D_ admin_server = FILE:/var/log/kadmind.log_x000D_[libdefaults]_x000D_ dns_lookup_realm = false_x000D_ ticket_lifetime = 24h_x000D_ renew_lifetime = 7d_x000D_ forwardable = true_x000D_ rdns = false_x000D_default_realm = WINITPRO.LOC_x000D_[realms]_x000D_ WINITPRO.LOC = {_x000D_ admin_server = dc02.remontka.loc_x000D_ kdc = dc02.remontka.loc_x000D_ }_x000D_[domain_realm]_x000D_ remontka.loc = WINITPRO.LOC_x000D_ .WINITPRO.LOC = WINITPRO.LOC_x000D_

Проверьте, что вы можете выполнить аутентификацию в вашем домене AD и получите тикет Kerberos:

kinit -C [email protected]
Введите пароль пользователя AD, проверьте что получен тикет.
klist

Настройка Ansible для управления компьютерами Windows

Теперь добавьте все ваши хосты Windows в инвентаризационный файл ansible:

$ sudo mcedit /etc/ansible/hosts

msk-rds2.remontka.loc_x000D_msk-rds3.remontka.loc_x000D_wks-t1122h2.remontka.loc_x000D_[windows_all:vars]_x000D_ansible_port=5985_x000D_[email protected]_x000D_ansible_connection=winrm_x000D_ansible_winrm_transport=kerberos_x000D_ansible_winrm_scheme=http_x000D_ansible_winrm_server_cert_validation=ignore

Проверьте, что все ваши Windows хосты (в моем списке два Windows Server 2019 и один компьютер Windows 11) доступны из Ansible:

$ ansible windows_all -m win_ping

В моем случае все хосты вернули ошибку:

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

Причина в том, что в этом примере для WinRM подключения используется протокол HTTP вместо HTTPS. Чтобы игнорировать ошибку, нужно разрешить незашифрованный трафик на хостах Windows:

Set-Item -Path WSMan:localhostServiceAllowUnencrypted -Value true

Теперь через Ansible вы можете выполнить произвольную команду на всех хостах. Например, я хочу сбросить DNS кеш на всех хостах Windows:

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

Команда успешно отработала везде.

Примеры управления конфигурацией Windows из Ansible

Теперь вы можете запускать плейбуки Ansible на ваших хостах Windows.

Например, вам нужно через Ansible выполнить PowerShell скрипт на всех хостах (в этом примере мы с помощью PowerShell получим текущие настройки DNS на хостах ). Создайте файл плейбука:

$ sudo mcedit /etc/ansible/playbooks/win-exec-powershell.yml

_x000D_---_x000D_- name: win_powershell_exec_x000D_ hosts: windows_all_x000D_ tasks:_x000D_ - name: check DNS_x000D_ win_shell: |_x000D_ Get-DnsClientServerAddress -InterfaceIndex (Get-NetAdapter|where Status -eq "Up").ifindex -ErrorAction SilentlyContinue_x000D_ register: command_output_x000D_ - name: command output_x000D_ ansible.builtin.debug:_x000D_

Выполните плейбук:

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

В данном примере плейбук отработал на всех Windows хостах и вернул текущие настройки DNS.

Далее рассмотрим несколько типовых плейбуков Absible, для стандартных задач управления хостами Windows.

Скопировать файл :

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

Создать файл:

_x000D_- name: Create file_x000D_ win_file:_x000D_ path: C:Tempfile.txt_x000D_ state: touch_x000D_

Удалить файл:

_x000D_- name: Delete file_x000D_ win_file:_x000D_ path: C:Tempfile.txt_x000D_ state: absent_x000D_

Создать параметр реестра :

_x000D_- name: Create reg dword _x000D_ win_regedit: _x000D_ path: HKLM:SOFTWAREMicrosoftWindowsCurrentVersionPoliciesDataCollection_x000D_ name: AllowTelemetry_x000D_ data: 0_x000D_ type: dword_x000D_

Установить программу из MSI :

Установить программу из MSI:

_x000D_- name: Install MSI package_x000D_ win_package:_x000D_ path: C:Distradobereader.msi_x000D_ arguments:_x000D_ - /install_x000D_ - /passive_x000D_ - /norestart_x000D_

Запустить службу Windows :

_x000D_- name: Run Windows Service_x000D_ win_service: _x000D_ name: wuauserv_x000D_ state: started_x000D_

Установить роль Windows Server:

_x000D_ - name: Install Windows Feature_x000D_ win_feature:_x000D_ name: SNMP-Service_x000D_ state: present_x000D_

Открыть порт в файерволе:

_x000D_- name: Open SMTP Port п_x000D_ win_firewall_rule:_x000D_ name: port 25_x000D_ localport: 25_x000D_ action: allow_x000D_ direction: in_x000D_ protocol: tcp_x000D_ state: present_x000D_ enabled: yes_x000D_

Выполнить PowerShell скрипт:

_x000D_- name: Run PowerShell Script_x000D_ win_command: powershell.exe -ExecutionPolicy ByPass -File C:/temp/powershellscript.ps1_x000D_

В этой статье мы рассмотрели, как управлять конфигурацией компьютеров Windows через Ansible. Если ваши хосты Windows не добавлены в домен Active Directory (находятся в рабочей группе), то удаленное управление конфигурацией хостов Windows через Ansible может быть неплохой альтернативной настройке с помощью доменных групповых политик .

Можно установить Ansible в подсистеме WSL на Windows . Это позволит запускать плейбуки без развертывания отдельного Linux хоста под ansible.
admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 недели ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 недели ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 недели ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 недели ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 недели ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 недели ago