#ansible #sudo
#ansible #sudo
Вопрос:
Когда ansible запускает несколько задач от имени root (become: да, become_method: sudo), я обнаружил, что он запускает каждую задачу в отдельных сеансах:
john.doe 481901 481809 0 19:44 pts/0 00:00:00 /bin/sh -c sudo -H -S -p "[sudo via ansible, key=blabla1] password:" -u root /bin/sh -c 'echo BECOME-SUCCESS-blabla1 ; /usr/bin/python3 /home/john.doe/.ansible/tmp/ansible-tmp-1609789454.667826-84063-275493394187528/AnsiballZ_command.py' amp;amp; sleep 0
john.doe 481937 481809 0 19:44 pts/0 00:00:00 /bin/sh -c sudo -H -S -p "[sudo via ansible, key=blabla2] password:" -u root /bin/sh -c 'echo BECOME-SUCCESS-blabla2 ; /usr/bin/python3 /home/john.doe/.ansible/tmp/ansible-tmp-1609789496.208312-84094-182235695212206/AnsiballZ_command.py' amp;amp; sleep 0
и в результате этого он не использует кэш sudo
(/var/run/sudo/ts/john.doe ), но для аутентификации каждый раз. Это
не проблема, если вы используете аутентификацию по паролю только потому, что вы
указываете пароль один раз --ask-become-pass
, однако, когда я
использовал Duo Mobile в качестве второго фактора для аутентификации, он нажимает каждый
раз, когда аутентифицируется sudo. Итак, если у вас несколько хостов и несколько задач, вам нужно постоянно отвечать на нажатие, и когда нажатие задерживается при «атаке отказа», запуск ansible завершится неудачей.
Мои вопросы:
- Есть ли способ разрешить ansible запускать sudo один раз, а затем запускать несколько задач? Используя приведенный выше пример, он может и должен запускать каждый из
AnsiballZ_command.py
файлов после одной проверки подлинности sudo. - Есть ли другой способ предотвратить подкачку Duo Mobile?
Комментарии:
1. Используйте duo mobile для подключения к компьютеру внутри вашей сети, откуда вы будете запускать свои скрипты ansible, не требующие авторизации второго фактора. Иначе вам нужен способ обойти эту вторую аутентификацию (как это делается, например, в gitlab, google-api …. с помощью токена).
2. @Zeitounator Требование состоит в том, чтобы использовать вторую аутентификацию для sudo независимо от того, приходит пользователь изнутри или снаружи, я просто не хочу использовать аутентификацию для каждой задачи.
3. Давайте предположим, что мы можем достичь этого (что, я почти уверен, невозможно ….) и что теперь вы можете запланировать запуск своего скрипта в tower / awx на 4 часа утра. Вы все равно получите хотя бы один толчок. И ваша автоматизация исчезает. (если вы не хотите нажимать на свой телефон посреди ночи)
Ответ №1:
Ответа на вопрос нет. Существуют три обходных пути::
- В начале задачи ansible отключите пароль sudo:
perl -i -pe 's/(?<=s)PASSWD/NOPASSWD/' /etc/sudoers.d/$(who am i | sed "s/./-/; s/ .*//")
и в конце включил его (поменяйте местами PASSWD и NOPASSWD в приведенном выше коде).
- В начале запуска отключите проверку подлинности Duo в консоли duo (вручную или с помощью вызова API), а в конце снова включите ее.
- Настройте пользователя ansible без проверки подлинности Duo, но это менее безопасно по сравнению с # 2, но все же обходной путь, если ваши требования безопасности позволяют это.
PS: Вы можете использовать ssh-ключи для аутентификации sudo, см. Эту ссылку.