В этой статье мы рассмотрим, как удаленно управлять хостами с Windows через популярную систему управления конфигурациями Ansible. Мы предполагаем, что Ansible уже установлен на вашем хосте Linux .
Ansible позволяет удаленно управлять хостами Windows со всеми поддерживаемым версиями ОС, начиная с Windows 7/Windows Server 2008 и до современных Windows 11/Windows Server 2022. В Windows должен быть установлен PowerShell 3.0 (или выше) и NET 4.0+.
Ansible использует WinRM для подключения к Windows. Поэтому вам нужно включить и настроить WinRM listener на всех управляемых хостах.
Enable-PSRemoting –Force
Если WinRM включен и настроен на хостах Windows, проверьте что с сервера Ansible на ваших серверах доступен порт TCP/5985 или TCP/5986 (если используется HTTPS).
$ nc -zv 192.168.13.122 5985
В зависимости от того. в какой среде вы будете использовать Ansible, вам нужно выбрать способ аутентификации.
Установите необходимые пакеты для Kerberos аутентификации:
$ sudo yum -y install python-devel krb5-devel krb5-libs krb5-workstation
$ 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
Теперь добавьте все ваши хосты 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"
Команда успешно отработала везде.
Теперь вы можете запускать плейбуки 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 может быть неплохой альтернативной настройке с помощью доменных групповых политик .
Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…
В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…
Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…
Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…
Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…