ansible - 对于需要 sudo 的多个任务,如何让 ansible 只运行一次 sudo?
问题描述
当 ansible 以 root 身份运行多个任务时(变成:是,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' && 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 进行身份验证时推送。所以如果你有多个主机,多个任务,你必须不断的响应push,而当push延迟出现“拒绝攻击”时,ansible run就会失败。
我的问题:
- 有没有办法让 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 控制台(手动或通过 API 调用)禁用 Duo 身份验证,最后重新启用它。
- 在没有 Duo 身份验证的情况下设置 ansible 用户,但这与 #2 相比安全性较低,但如果您的安全要求允许,这仍然是一种解决方法。
PS:您可以使用 ssh 密钥对 sudo 进行身份验证,请参阅此链接。
推荐阅读
- reactjs - 使用 AWS Amplify 部署的 React 应用程序在浏览器中显示空白页面
- reactjs - 反应 axios API GET 请求返回太多对象
- python - 我想绘制训练数据集中类的分布以检查类不平衡
- ios - async/await 概念中 async、detach 和 asyncDetached 函数的区别
- ios - SwiftUI - ForEach 内两个不同子视图的数据不一致
- reactjs - 带有反应的Spring引导继续将css文件读取为('application / json')而不是css文件
- hibernate - 将 Postgresql 从 9.6 升级到 10.17 后无法启动 Maven 项目
- react-native - 反应原生谷歌登录卡在白色加载屏幕上
- gradle - Gradle 自定义任务中的 Jacoco 测试覆盖率
- excel - 在excel中生成库存项目编码