Spec-Zone.ru › Ansible

Часто задаваемые вопросы о Windows

Ниже приведены ответы на некоторые часто задаваемые вопросы об Ansible и Windows.

Примечание

Этот документ охватывает вопросы по управлению серверами Microsoft Windows с помощью Ansible. Для вопросов по Ansible Core, пожалуйста, обратитесь к общей странице FAQ.

Работает ли Ansible с Windows XP или Server 2003?

Ansible не работает с хостами Windows XP или Server 2003. Ansible работает с такими версиями операционных систем Windows:

  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
  • Windows 10
  • Windows 11

Поддержка Windows Server 2008, 2008 R2 и Windows 7 закончилась в версии 2.10. Поддержка Windows Server 2012, 2012 R2, Windows 8 и 8.1 закончилась в версии 2.16.

Ansible также имеет минимальные требования к версии PowerShell — см. Настройка хоста Windows для получения последней информации.

Можно ли управлять Windows Nano Server с помощью Ansible?

В настоящее время Ansible не работает с Windows Nano Server, так как у него нет доступа к полному .NET Framework, используемому большинством модулей и внутренних компонентов.

Может ли Ansible работать на Windows?

Нет, Ansible может только управлять хостами Windows. Ansible не может выполняться на хосте Windows напрямую, хотя он может работать под Windows Subsystem for Linux (WSL).

Примечание

Windows Subsystem for Linux не поддерживается Ansible и не должен использоваться в производственных системах.

Для установки Ansible на WSL можно выполнить следующие команды в терминале bash:

sudo apt-get update
sudo apt-get install python3-pip git libffi-dev libssl-dev -y
pip install --user 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

Если при запуске Ansible на WSL возникают ошибки таймаута, это может быть связано с проблемой с sleep возвращает неправильные значения. Следующее решение может устранить проблему:

mv /usr/bin/sleep /usr/bin/sleep.orig
ln -s /bin/true /usr/bin/sleep

Другой вариант — использовать WSL 2, если вы используете Windows 10, более позднюю, чем сборка 2004.

wsl --set-default-version 2

Можно ли использовать ключи SSH для аутентификации на хостах Windows?

Вы не можете использовать ключи SSH с плагинами подключения WinRM или PSRP. Эти плагины подключения используют сертификаты X509 для аутентификации вместо пар ключей SSH, используемых SSH.

Способ генерации и сопоставления сертификатов X509 с пользователем отличается от реализации SSH; см. документацию Windows Remote Management для получения дополнительной информации.

В Ansible 2.8 была добавлена экспериментальная возможность использовать плагин подключения SSH, который использует ключи 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. См. документацию Понимание повышения привилегий: become для получения дополнительной информации.
  • Использование задачи планировщика, которая может быть создана с помощью win_scheduled_task. Как и become, это обойдет все ограничения WinRM, но может использоваться только для выполнения команд, а не модулей.
  • Использование win_psexec для выполнения команды на хосте. PSExec не использует WinRM, поэтому обойдет все ограничения.
  • Для доступа к сетевым ресурсам без этих обходных путей можно использовать CredSSP или Kerberos с включенным делегированием учетных данных.

См. Понимание повышения привилегий: become для получения дополнительной информации по использованию become. В разделе ограничений в Windows Remote Management содержатся подробности об ограничениях WinRM.

Программа не устанавливается на Windows с Ansible

См. данный вопрос для получения дополнительной информации об ограничениях WinRM.

Какие модули Windows доступны?

Большинство модулей 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_template)
  • wait_for_connection

Модули Ansible для Windows находятся в коллекциях Ansible.Windows, Community.Windows и Chocolatey.Chocolatey.

Можно ли запускать модули Python на хостах Windows?

Нет, протокол подключения WinRM настроен на использование модулей PowerShell, поэтому модули Python не будут работать. Способ обойти эту проблему — использовать delegate_to: localhost для запуска модуля Python на контрольном узле Ansible. Это полезно, если во время выполнения книги задач необходимо связаться с внешней службой, и нет эквивалентного модуля Windows.

Можно ли подключиться к хостам Windows через SSH?

В Ansible 2.8 была добавлена экспериментальная возможность использования плагина подключения SSH для управления хостами Windows. Для подключения к хостам Windows через SSH необходимо установить и настроить разветвление Win32-OpenSSH, которое разрабатывается Microsoft на хосте(ах) Windows. Хотя большинство основных функций должно работать с SSH, Win32-OpenSSH постоянно обновляется, с добавлением новых функций и исправлением ошибок в каждом релизе. Мы настоятельно рекомендуем вам установить последнюю версию Win32-OpenSSH с страницы релизов GitHub при использовании с Ansible на хостах Windows.

Для использования SSH в качестве подключения к хосту Windows установите следующие переменные в инвентаре:

ansible_connection=ssh

# Set either cmd or powershell not both
ansible_shell_type=cmd
# ansible_shell_type=powershell

Значение для ansible_shell_type должно быть либо cmd, либо powershell. Используйте cmd, если DefaultShell не настроено на службе SSH, и powershell, если это установлено как DefaultShell.

Почему подключение к хосту Windows через SSH не удается?

Если вы не используете Win32-OpenSSH описанным выше способом, необходимо подключаться к хостам Windows с помощью Windows Remote Management. Если выходные данные Ansible указывают на то, что использовался SSH, либо вы неправильно настроили переменные подключения, либо хост не унаследовал их должным образом.

Убедитесь, что ansible_connection: winrm установлено в инвентаре для хостов Windows.

Почему мои учетные данные отклоняются?

Это может быть вызвано множеством причин, не связанных с неверными учетными данными.

См. HTTP 401/Отклонение учетных данных в Настройка хоста Windows для более подробного руководства, что это может означать.

END_OF_DOCUMENT_MARKER

Почему я получаю ошибку 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

Сценарии Ansible

Введение в сценарии

Советы и рекомендации по Ansible

Советы и рекомендации по сценариям

Общение

Есть вопросы? Нужна помощь? Хотите поделиться своими идеями? Посетите руководство по общению Ansible

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/os_guide/windows_faq.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API