对于需要 sudo 的多个任务,如何让 ansible 只执行一次 运行 sudo?
How to let ansible to run sudo only once for multiple tasks requiring sudo?
当 ansible 运行s 多个任务作为 root 时(变成:是的,become_method:sudo),我发现它 运行s 每个任务在单独的会话中:
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' && 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' && sleep 0
因此,它不使用 sudo 缓存
(/var/run/sudo/ts/john.doe) 但每次都要进行身份验证。这是
如果您只使用密码身份验证,这不是问题,因为您
使用 --ask-become-pass
指定密码一次,但是当我
使用 Duo Mobile 作为验证的第二个因素,它推送每个
sudo 被验证的时间。所以如果你有多个主机和多个任务,你必须不断地响应推送,而当出现“拒绝攻击”时延迟推送时,ansible 运行 将失败。
我的问题:
- 有没有办法让ansible先sudo一次,然后运行
多个任务?使用上面的例子,它可以而且应该 运行
每个
AnsiballZ_command.py
文件在一个 sudo 之后
身份验证。
- 有没有其他的可以防止Duo Mobile寻呼的?
问题没有答案。三个解决方法是:
- ansible任务开始时,禁用sudo密码:
perl -i -pe 's/(?<=\s)PASSWD/NOPASSWD/' /etc/sudoers.d/$(who am i | sed "s/\./-/; s/ .*//")
最后,启用它(交换上面代码中的 PASSWD 和 NOPASSWD)。
- 在运行开头,禁用Duo身份验证
duo 控制台(手动或使用 API 调用),并在最后重新启用
它。
- 设置一个没有Duo身份验证的ansible用户,但是这个比较少
与 #2 相比安全,但如果您的安全性仍然是一种解决方法
要求允许。
PS:您可以使用 ssh 密钥对 sudo 进行身份验证,请参阅 this link。
当 ansible 运行s 多个任务作为 root 时(变成:是的,become_method:sudo),我发现它 运行s 每个任务在单独的会话中:
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' && 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' && sleep 0
因此,它不使用 sudo 缓存
(/var/run/sudo/ts/john.doe) 但每次都要进行身份验证。这是
如果您只使用密码身份验证,这不是问题,因为您
使用 --ask-become-pass
指定密码一次,但是当我
使用 Duo Mobile 作为验证的第二个因素,它推送每个
sudo 被验证的时间。所以如果你有多个主机和多个任务,你必须不断地响应推送,而当出现“拒绝攻击”时延迟推送时,ansible 运行 将失败。
我的问题:
- 有没有办法让ansible先sudo一次,然后运行
多个任务?使用上面的例子,它可以而且应该 运行
每个
AnsiballZ_command.py
文件在一个 sudo 之后 身份验证。 - 有没有其他的可以防止Duo Mobile寻呼的?
问题没有答案。三个解决方法是:
- ansible任务开始时,禁用sudo密码:
perl -i -pe 's/(?<=\s)PASSWD/NOPASSWD/' /etc/sudoers.d/$(who am i | sed "s/\./-/; s/ .*//")
最后,启用它(交换上面代码中的 PASSWD 和 NOPASSWD)。
- 在运行开头,禁用Duo身份验证 duo 控制台(手动或使用 API 调用),并在最后重新启用 它。
- 设置一个没有Duo身份验证的ansible用户,但是这个比较少 与 #2 相比安全,但如果您的安全性仍然是一种解决方法 要求允许。
PS:您可以使用 ssh 密钥对 sudo 进行身份验证,请参阅 this link。