Ansible变得无密码

时间:2019-01-09 06:55:53

标签: ssh ansible inventory

在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中实现相同目标?

2 个答案:

答案 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

希望这会有所帮助。