Ansible:没有密码的sudo

时间:2016-05-25 10:37:02

标签: linux ansible sudo

我想用没有sudo密码的用户sa1运行ansible:

第一次确定:

[root@centos1 cp]# ansible cent2 -m shell -a "sudo yum -y install httpd"

cent2 | SUCCESS | rc=0 >>

第二次失败:

[root@centos1 cp]# ansible cent2 -s -m yum -a "name=httpd state=absent"

cent2 | FAILED! => {
    "changed": false,
    "failed": true,
    "module_stderr": "",
    "module_stdout": "sudo: a password is required\r\n",
    "msg": "MODULE FAILURE",
    "parsed": false
}

请帮忙!

3 个答案:

答案 0 :(得分:13)

这不是你服务器配置的问题。确保用户ansible在没有密码的情况下使用sudo。

  1. 要登录服务器
  2. 使用sudo visudo
  3. 打开sudoers文件
  4. 确保您的行有这样的内容:centos ALL=(ALL) NOPASSWD:ALL
  5. centos替换为您的用户
  6. 保存文件
  7. 您可以通过运行以下命令从服务器本身进行尝试:

    sudo -u [yourusername] sudo echo "success"
    

    如果这样可行,它也应该起作用。

答案 1 :(得分:4)

默认情况下,ansible运行带有标志的sudo:-H -S -n成为root。其中--non-interactive是选项-n的相应长格式。这个选项似乎使sudo返回错误消息,而不试图让认证模块做他们的事情。

我设法通过创建一个包含以下内容的〜/ .ansible.cfg来解决密码错误:

[defaults]
sudo_flags = --set-home --stdin

这至少足以让pam_ssh_agent_auth.so运行并验证我。

答案 2 :(得分:0)

如果你想要 ansible 为你做的,这里是剧本

  1. 将用户添加到所选组(在我的例子中为 wheel
  2. 将此添加到您的剧本
- name: Make users passwordless for sudo in group wheel
  lineinfile:
    path: /etc/sudoers
    state: present
    regexp: '^%wheel'
    line: '%wheel ALL=(ALL) NOPASSWD: ALL'
    validate: 'visudo -cf %s'