Управление узлами Windows с помощью Ansible
Управление узлами Windows отличается от управления узлами POSIX. Если у вас есть управляемые узлы под управлением Windows, ознакомьтесь с этими темами.
- Подготовка Windows
- Какие модули доступны?
- Использование Windows в качестве управляющего узла
- Факты Windows
Здесь приведён указатель всех тем, рассмотренных в этом руководстве.
- Контроль приложений Windows
- Настройка желаемого состояния
- Производительность Windows
- Поддержка PowerShell 7
- См. также
- SSH в Windows
- Использование Ansible и Windows
- Удалённое управление Windows
- Аутентификация WinRM с помощью сертификатов
- Аутентификация Kerberos
Подготовка Windows
На узлах Windows должна быть установлена Windows Server 2016 или Windows 10 либо более новая версия. Поскольку эти версии Windows по умолчанию поставляются с PowerShell 5.1, для подготовки узла Windows не требуется ничего дополнительно.
Поддержка каждой версии Windows связана с расширенным циклом поддержки соответствующей операционной системы, который обычно составляет 10 лет с даты выпуска. Ansible тестируется на серверных версиях Windows, но должен быть совместим и с настольными версиями, например Windows 10 и 11.
Подключение к узлам Windows
По умолчанию Ansible подключается к управляемым узлам POSIX с помощью OpenSSH. Узлы Windows также могут использовать SSH, но исторически для них в качестве транспорта подключения применяется WinRM. С узлами Windows можно использовать следующие поддерживаемые плагины подключения:
- Удалённое взаимодействие PowerShell через WinRM — psrp
- SSH — ssh
- Удалённое управление Windows — winrm
PSRP и WinRM
Исторически Ansible использовал Windows Remote Management (WinRM) в качестве протокола подключения для управления узлами Windows. Плагины подключения psrp и winrm работают через WinRM, и их можно использовать для подключения к узлам Windows. Плагин подключения psrp новее и обладает рядом преимуществ по сравнению с плагином подключения winrm, например:
- Может работать немного быстрее
- Меньше подвержен проблемам с тайм-аутами при высокой нагрузке на узел Windows
- Лучше поддерживает прокси-серверы
Подробнее о настройке WinRM и использовании плагинов подключения psrp и winrm в Ansible см. в разделе Удалённое управление Windows.
SSH
SSH — это традиционный плагин подключения для узлов POSIX, однако его также можно использовать для управления узлами Windows вместо традиционных плагинов подключения psrp или winrm.
Примечание
Ansible поддерживает использование плагина подключения SSH с узлами Windows начиная с Ansible 2.8, но официальная поддержка появилась только в версии 2.18.
Некоторые преимущества SSH по сравнению с транспортами на основе WinRM:
- SSH проще настроить в средах без домена
- SSH поддерживает аутентификацию на основе ключей, которой проще управлять, чем сертификатами
- Передача файлов по SSH быстрее, чем по WinRM
Подробнее о настройке SSH для узлов Windows см. в разделе SSH в Windows.
Какие модули доступны?
Большинство основных модулей Ansible предназначены для Unix-подобных машин и других универсальных служб. Эти модули написаны на Python и используют API, отсутствующие в Windows, поэтому они не будут работать.
Для узлов Windows предназначены специальные модули, написанные на PowerShell. Список этих модулей можно найти в коллекциях Ansible.Windows, Community.Windows, Microsoft.Ad, Chocolatey.Chocolatey и других.
Кроме того, с Windows работают следующие модули и плагины действий Ansible Core:
- add_host
- assert
- async_status
- debug
- fail
- fetch
- group_by
- include
- include_role
- include_vars
- meta
- pause
- raw
- script
- set_fact
- set_stats
- setup
- slurp
- template (также: win_template)
- wait_for_connection
Использование Windows в качестве управляющего узла
Ansible не может работать в Windows в качестве управляющего узла из-за ограничений API платформы. Однако Ansible можно запускать в Windows с помощью подсистемы Windows для Linux (WSL) или в контейнере.
Примечание
Подсистема Windows для Linux не поддерживается Ansible и не должна использоваться в производственных системах.
Факты Windows
Ansible собирает факты в Windows так же, как и на других узлах POSIX, но с некоторыми отличиями. Некоторые факты могут иметь другой формат для обеспечения обратной совместимости или вовсе отсутствовать.
Чтобы просмотреть факты, которые Ansible собирает с узлов Windows, запустите модуль setup.
ansible windows -m setup
Распространённые проблемы Windows
Команда работает локально, но не в Ansible
Ansible выполняет команды через сетевой вход в систему, который может изменить способ авторизации действий в Windows. Из-за этого команды, работающие локально, могут завершаться ошибкой при выполнении через Ansible. Вот несколько примеров таких ошибок:
- процесс не может передать учётные данные пользователя сетевому ресурсу, что приводит к ошибкам
Access is DeniedилиResource Unavailable - приложениям, которым требуется интерактивный сеанс, не удастся работать
- доступ к некоторым API Windows ограничен при выполнении команд через сетевой вход в систему
- для некоторых задач требуется доступ к хранилищу секретов
DPAPI, которое обычно недоступно при сетевом входе в систему
Обычно для выполнения команды с явными учётными данными используют Повышение привилегий: become. Использование become в Windows переключает сетевой вход в систему на интерактивный. Если для идентификатора become указаны явные учётные данные, команда сможет обращаться к сетевым ресурсам и разблокировать хранилище DPAPI.
Другой вариант — использовать параметр аутентификации в плагине подключения, который позволяет делегировать учётные данные. Для SSH это можно сделать с помощью явного указания имени пользователя и пароля либо с помощью входа Kerberos/GSSAPI с включённым делегированием. Для подключений на основе WinRM можно использовать CredSSP или Kerberos с делегированием. Дополнительные сведения см. в документации к соответствующему плагину подключения.
Учётные данные отклоняются
Есть несколько причин, по которым учётные данные могут быть отклонены при подключении к узлу Windows. Вот некоторые из них:
- неверное имя пользователя или пароль
- учётная запись пользователя заблокирована, отключена или ей запрещён вход на этот сервер
- учётной записи пользователя запрещён вход через сеть
- учётная запись пользователя не входит в локальную группу «Администраторы»
- учётная запись пользователя является локальной, а параметр
LocalAccountTokenFilterPolicyне задан
Чтобы проверить правильность учётных данных или наличие у пользователя разрешения на вход на узел, выполните на узле Windows приведённую ниже команду PowerShell, чтобы просмотреть последнюю неудачную попытку входа. Будут выведены сведения о событии, включая код ошибки Status и Sub Status, указывающий причину сбоя входа.
Get-WinEvent -FilterHashtable @{LogName = 'Security'; Id = 4625} |
Select-Object -First 1 -ExpandProperty Message
Не все плагины подключения требуют, чтобы пользователь, от имени которого выполняется подключение, входил в локальную группу «Администраторы», однако обычно это настройка по умолчанию. Если пользователь не входит в локальную группу «Администраторы» или является локальным пользователем, для которого не задан параметр LocalAccountTokenFilterPolicy, аутентификация завершится ошибкой.
См. также
- Введение в разовые команды
-
Примеры основных команд
- Работа с плейбуками
-
Изучение языка управления конфигурацией Ansible
- Стоит ли разрабатывать модуль?
-
Как писать модули
- Контроль приложений Windows
-
Использование Ansible с управляемыми узлами Windows App Control
- Настройка желаемого состояния
-
Использование Ansible с Windows Desired State Configuration
- Производительность Windows
-
Особенности производительности при управлении узлами Windows
- Использование Ansible и Windows
-
Руководство по использованию Windows
- Список рассылки
-
Есть вопросы? Нужна помощь? Есть идеи? Загляните в список рассылки в Google Groups
- Чат в реальном времени
-
Как присоединиться к каналам Ansible
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/os_guide/intro_windows.html