Сайт Георгия Мурого

RuToken + Ansible: костыль с локальной аутентификацией

Ansible не поддерживает управление хостами с двухфакторной аутентификацией (2FA), причина этого разъясняется в FAQ (https://docs.ansible.com/ansible/latest/reference_appendices/faq.html).

Рекомендации различных ресурсов интернета по обходу этого ограничения можно свести к трем группам:

Однако когда Ansible обслуживает тот же хост, на котором она запускается, существует простая лазейка.

Вначале опишу симптомы проблемы.

Я использую RuToken ЭЦП для локального входа на рабочую станцию под Linux, токен используется как необязательное средство аутентификации. Настроено по документации RuToken (https://dev.rutoken.ru/pages/viewpage.action?pageId=3440696 и https://dev.rutoken.ru/pages/viewpage.action?pageId=3440665).

Для подключения к хосту этой рабочей станции в Ansible используется локальное соединение, повышение привилегий — по умолчанию (в [sudo]). Файлы inventory зашифрованы в Ansible Vault.

Файл hosts.yml:

all:
  hosts:
    workstation1:
      ansible_python_interpreter: /usr/bin/python3.9
      ansible_connection: local
      ansible_become_pass: PASSWORD

Если к компьютеру токен не подключен, повышение привилегий происходит успешно:

$ ansible workstation1 -m ping -b
Vault password: 
workstation1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Если же токен подключен, повышение привилегий не происходит: после ввода пароля от vault на терминал ничего не выводится, а после прерывания работы Ansible клавиатурной комбинацией Ctrl+C приходит уведомление безопасности, содержащее «a password is required».

Лазейка — в том, чтобы в терминале, где позже будет запущена Ansible, выполнить команду sudo. В течение некоторого времени после этого (по умолчанию — 15 минут) повышение привилегий произойдет без повторной аутентификации.

Пример:

$ sudo which false
Login with RuToken001: 
/usr/bin/false
$ ansible workstation1 -m ping -b
Vault password: 
workstation1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Пусть такое решение — очевидный костыль, надеюсь, оно будет вам полезным.


Опубликовано на Хабре 27 марта 2023 года, URL: https://habr.com/ru/sandbox/188360/

Опубликовано в ЖЖ 23 апреля 2023 года, URL: https://moury.livejournal.com/124406.html

Вы можете комментировать в ЖЖ.