在shell中,我按照以下方法成为没有任何密码的root用户。而且工作正常。
ssh-agent bash
ssh-add /repository/ansible/.ssh/id_rsa_ansible
ssh -A ansible@e8-df1
[ansible@e8-df1 ~]$ sudo -i
[root@e8-df1 ~]#
但是,在Ansible中,我没有达到同样的目标,并且出错了。以下是我的无用清单和剧本。
库存:
[qv]
e8-df1
e8-df2
[qv:vars]
ansible_ssh_user=ansible
ansible_ssh_private_key_file=/repository/ansible/.ssh/id_rsa_ansible
剧本:
---
- hosts: qv
become: yes
roles:
- abc
错误:
fatal: [e8-df1]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_name": "setup"
},
"module_stderr": "Shared connection to e8-df1 closed.\r\n",
"module_stdout": "sudo: a password is required\r\n",
"msg": "MODULE FAILURE"
}
fatal: [e8-df2]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_name": "setup"
},
"module_stderr": "Shared connection to e8-df2 closed.\r\n",
"module_stdout": "sudo: a password is required\r\n",
"msg": "MODULE FAILURE"
}
我已经阅读了一些文档和问答,他们建议在sudoers文件中添加以下行。
ansible ALL=(ALL) NOPASSWD: ALL
现在,我无法理解为什么在没有sudoers配置的情况下shell过程仍在工作。如果还有其他方法可以在ansible中实现相同目标?
答案 0 :(得分:0)
问题在于,当您通过外壳连接时,您正在使用 -A 参数在SSH连接中传递代理,如果要传递代理,则在Ansible中需要配置此行为SSH连接上。
这里有一个与解决方案有关的问题:SSH Agent Forwarding with Ansible
基本上,您需要在ansible.cfg上提供所需的SSH参数,也可以使用〜/ .ssh / config上的SSH客户端配置将参数添加到要连接的主机上。
答案 1 :(得分:0)
您需要在配置文件private_key_file = /path/to/file
/etc/ansible/ansible.cfg
根据您的疑问,它应该如下所示:
private_key_file = /repository/ansible/.ssh/id_rsa_ansible
希望这会有所帮助。