我想在完全自动化的上下文中使用ansible,我无法手动输入密码 . 为了解决这个问题,我使用SSH公钥连接服务器,并在我的 sudoers
配置中列出了多个命令,例如 apt-get install *
,因此我不需要密码来运行它们 . 例如 sudo apt-get install git
.
但是,如果在剧本中设置 become
是 True
,则ansible会要求我输入不需要的密码 .
-
如何在不问密码的情况下告诉ansible将命令作为sudo运行?
-
您是否知道在没有密码的情况下安装apt软件包的另一种方法?
-
我应该使用另一种方法吗?
sudoers conf
myuser ALL = NOPASSWD: /usr/bin/apt-get install *
ansible
- name: install the latest version of ntpdate
package:
name: ntpdate
state: latest
become: True
生成此输出:
failed: [x.x.x.x] (item=ntpdate) => {"failed": true, "item": "python3-dev", "module_stderr": "", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE", "rc": 1}
4 回答
在我所研究的所有Ansible剧本中,我只做了两件事,以便任务运行成为:真
/etc/sudoers.d/demo
:演示ALL =(全部)NOPASSWD:全部
ssh-copy-id
将ssh id从Ansible主机复制到目标主机模板/ without_sudo
任务/ main.yml
对于ansible命令的其余部分没有sudo
简单的答案是,如果不启用所有命令(或至少
python
),则无法执行此操作 .Ansible不会按预期运行命令 . 它运行Python脚本 . 使用
-vvv
执行ansible-playbook
时,可以看到确切的命令 . 它们要复杂得多,要启用它们,您必须将它们添加到sudoers
,例如:棘手的部分是所有空格,引号和其他特殊字符都是相关的,并且在通过反复试验获得正确的命令模式之前,用通配符替换字符,系统将不允许命令以提升的权限运行 . 实际上,您无法将Ansible运行的所有命令列入白名单 .
唯一的例外是
raw
模块,它完整地运行给定的命令 .在我看来,如果你设置你的节点=(ALL)NOPASSWD:ALL . 然后任何人:包括黑客可以访问你的节点 .
所以我可以建议,
这会问你的节点sudo密码 . 你可以执行你的操作,因为我猜你知道你的节点的凭证 .