Часто задаваемые вопросы по Windows
Ниже приведены ответы на некоторые часто задаваемые вопросы, касающиеся Ansible и Windows.
Примечание
В данном документе рассматриваются вопросы управления серверами Microsoft Windows с помощью Ansible. Вопросы по Ansible Core см. на странице вопросов и ответов.
Поддерживает ли Ansible Windows XP или Server 2003?
Ansible не поддерживает управление хостами Windows XP или Server 2003. Поддерживаемые версии операционных систем:
- Windows Server 2008
- Windows Server 2008 R2
- Windows Server 2012
- Windows Server 2012 R2
- Windows Server 2016
- Windows 7
- Windows 8.1
- Windows 10
Ansible также имеет минимальные требования к версии PowerShell — см. Настройка хоста Windows для получения последней информации.
Можно ли управлять Windows Nano Server?
В настоящее время Ansible не поддерживает Windows Nano Server, так как у него нет доступа к полному .NET Framework, используемому большинством модулей и внутренних компонентов.
Может ли Ansible работать на Windows?
Нет, Ansible не может работать на хосте Windows и может управлять только хостами Windows, но Ansible может работать в Windows Subsystem for Linux (WSL).
Примечание
Windows Subsystem for Linux не поддерживается Microsoft или Ansible и не должен использоваться в производственных системах.
Для установки Ansible в WSL можно выполнить следующие команды в терминале bash:
sudo apt-get update sudo apt-get install python-pip git libffi-dev libssl-dev -y pip install ansible pywinrm
Чтобы запустить Ansible из исходного кода вместо релиза в WSL, просто удалите установленную версию pip, а затем клонируйте репозиторий git.
pip uninstall ansible -y git clone https://github.com/ansible/ansible.git source ansible/hacking/env-setup # to enable Ansible on login, run the following echo ". ~/ansible/hacking/env-setup -q' >> ~/.bashrc
Можно ли использовать ключи SSH для аутентификации?
Windows использует WinRM в качестве транспортного протокола. WinRM поддерживает широкий спектр вариантов аутентификации. Ближайшим аналогом ключей SSH является использование аутентификации с помощью сертификатов, которая сопоставляет сертификат X509 с локальным пользователем.
Способ генерации и сопоставления этих сертификатов с пользователем отличается от реализации SSH; для получения дополнительной информации см. документацию по Удалённое управление Windows.
Почему команда, работающая локально, не работает под Ansible?
Ansible выполняет команды через WinRM. Эти процессы отличаются от выполнения команды локально следующими способами:
- Если не используется такой метод аутентификации, как CredSSP или Kerberos с делегированием учетных данных, процесс WinRM не имеет возможности делегировать учетные данные пользователя сетевому ресурсу, что приводит к ошибкам
Access is Denied. - Все процессы, выполняемые через WinRM, находятся в неинтерактивном сеансе. Приложения, требующие интерактивного сеанса, работать не будут.
- При выполнении через WinRM Windows ограничивает доступ к внутренним API Windows, таким как API Windows Update и DPAPI, от которых зависят некоторые установщики и программы.
Некоторые способы обойти эти ограничения:
- Используйте
become, который выполняет команду так, как если бы она выполнялась локально. Это позволит обойти большинство ограничений WinRM, так как Windows не будет знать, что процесс выполняется под WinRM, когда используетсяbecome. Дополнительную информацию см. в документации Понимание повышения привилегий. - Используйте запланированную задачу, которую можно создать с помощью
win_scheduled_task. Как иbecome, она обойдет все ограничения WinRM, но может использоваться только для выполнения команд, а не модулей. - Используйте
win_psexecдля выполнения команды на хосте. PSExec не использует WinRM, поэтому обойдет любые ограничения. - Для доступа к сетевым ресурсам без обходных путей можно использовать метод аутентификации, поддерживающий делегирование учетных данных. Это поддерживается как CredSSP, так и Kerberos с включённым делегированием учетных данных.
См. Понимание повышения привилегий для получения дополнительной информации о том, как использовать become. Подробные сведения об ограничениях WinRM см. в разделе «Ограничения» документации по Удалённому управлению Windows.
Эта программа не устанавливается с Ansible
Для получения дополнительной информации об ограничениях WinRM см. вопрос.
Какие модули доступны?
Большинство модулей Ansible в Ansible Core написаны для комбинации машин Linux/Unix и произвольных веб-служб. Эти модули написаны на Python и большинство из них не работают в Windows.
Поэтому существуют специализированные модули Windows, написанные на PowerShell и предназначенные для работы на хостах Windows. Список этих модулей можно найти здесь.
Кроме того, следующие модули/плагины действий Ansible Core работают с Windows:
- 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_tempate)
- wait_for_connection
Можно ли запускать модули Python?
Нет, протокол подключения WinRM настроен на использование модулей PowerShell, поэтому модули Python не будут работать. Чтобы обойти эту проблему, можно использовать delegate_to: localhost для запуска модуля Python на контроллере Ansible. Это полезно, если в ходе выполнения playbook необходимо связаться с внешней службой, и нет эквивалентного модуля Windows.
Можно ли подключиться через SSH?
Microsoft объявил и разрабатывает форк OpenSSH для Windows, который позволяет удалённо управлять серверами Windows через протокол SSH вместо WinRM. Хотя это можно установить и использовать для обычных SSH-клиентов, это всё ещё находится на стадии бета-тестирования Microsoft, и необходимая функциональность ещё не была разработана в Ansible.
В будущем планируется добавить эту функцию, и эта страница будет обновлена, как только появится дополнительная информация.
Почему подключение к хосту через ssh не удаётся?
Если при попытке подключения к хосту Windows в выводе ошибки указано, что используется SSH, это означает, что переменные подключения не настроены должным образом или хост не наследует их правильно.
Убедитесь, что ansible_connection: winrm установлен в инвентаре для хоста Windows.
Почему мои учетные данные отклоняются?
Это может быть по многим причинам, не связанным с неправильными учетными данными.
Для получения более подробного руководства по этому вопросу см. раздел HTTP 401/Credentials Rejected в Настройка хоста Windows.
Почему я получаю ошибку SSL CERTIFICATE_VERIFY_FAILED?
Если контроллер Ansible работает на Python 2.7.9+ или более старой версии Python, в которой обратно перенесена SSLContext (например, Python 2.7.5 в RHEL 7), контроллер попытается проверить подпись сертификата, используемого WinRM для HTTPS-соединения. Если сертификат не может быть проверен (например, в случае самоподписанного сертификата), процесс проверки завершится с ошибкой.
Чтобы проигнорировать проверку сертификата, добавьте ansible_winrm_server_cert_validation: ignore в инвентарь для хоста Windows.
См. также
- Руководство пользователя
- Индекс документации
- Руководства по Windows
- Индекс документации по Windows
- Работа с Playbook
- Вводный обзор Playbook
- Рекомендации по лучшим практикам
- Рекомендации по лучшим практикам
- Список рассылки пользователей
- Есть вопрос? Задавайте его на форуме!
- irc.freenode.net
- #ansible IRC-чат-канал
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.6/user_guide/windows_faq.html