Ansible sudo 不起作用

Posted

技术标签:

【中文标题】Ansible sudo 不起作用【英文标题】:Ansible sudo does not work 【发布时间】:2015-01-12 04:30:39 【问题描述】:

我正在编写 Ansible 脚本来在 CentOS 机器上安装一些软件包。

我无法在 Ansible 中使用 sudo 执行简单的 YUM 命令

- name: Install Java
  yum: name=java_version state=present
  sudo_user: dexter
  sudo: yes

我收到以下错误

任务:[tomcat |安装Java] *********************************************** ** 失败:[server-name] => "changed": true, "rc": 1, "results": ["加载的插件:fastestmirror, la ngpacks\n"] msg:您需要是 root 才能执行此命令。 致命:所有主机都已失败——正在中止

我还设置了我的远程用户。

remote_user: dexter

我正在使用 ansible 1.7.2

我只能访问 dexter 用户(有权访问 root)

dexter 用户在 sudoers 列表中。

我可以对机器上的用户执行 sudo 命令以及类似的操作

sudo yum install ...

很奇怪,我还可以使用 shell 在 Ansible 中运行 SUDO 命令

- name: Add permissions to dummy path
  shell: sudo chmod 0755 dummy_path

似乎 ansible 中的 sudo 与 sudo 命令不一样。还是我做错了什么?

谢谢!

[编辑] 根据@tedder42 的建议,我在没有 sudo_user 的情况下使用 (-vvvv') 添加控制台输出,但使用 sudo: yes

TASK: [apache | Install Apache] ***********************************************

<server-name> ESTABLISH CONNECTION FOR USER: dexter

<server-name> REMOTE_MODULE yum name=httpd state=present

<server-name> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=dexter', '-o','ConnectTimeout=10', 'server-name', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663 && echo $HOME/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663'"]

<server-name> PUT /tmp/tmpV8bobo TO /home/dexter/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663/yum

<server-name> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=dexter', '-o', 'ConnectTimeout=10', 'server-name', u'/bin/sh -c \'sudo -k && sudo -H -S -p "[sudo via ansible, key=nnqylcywghyrogwhmdyzwidpsqbqxuef] password: " -u root /bin/sh -c \'"\'"\'echo SUDO-SUCCESS-nnqylcywghyrogwhmdyzwidpsqbqxuef; LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python -tt /home/dexter/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663/yum; rm -rf /home/dexter/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663/ >/dev/null 2>&1\'"\'"\'\'']

fatal: [server-name] => failed to parse: Sorry, user dexter is not allowed to execute '/bin/sh -c echo SUDO-SUCCESS-nnqylcywghyrogwhmdyzwidpsqbqxuef; LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python -tt /home/dexter/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663/yum; rm -rf /home/dexter/.ansible/tmp/ansible-tmp-1416243654.43-120840990326663/ >/dev/null 2>&1' as root on server-name.mia.amadeus.net.


FATAL: all hosts have already failed -- aborting

【问题讨论】:

【参考方案1】:

你不需要线:

sudo_user: dexter 

这会导致脚本作为“dexter”执行,并且您想成为 root。所以ansible ssh 到远程主机作为用户'dexter',然后sudo 到'dexter'。 :)

http://docs.ansible.com/playbooks_intro.html

【讨论】:

如果我删除 sudo_user 行,我会得到这个...致命:[服务器名称] => 解析失败:对不起,用户 dexter 不允许执行 '/bin/sh -c回声 SUDO-SUCCESS-wrwerwerhwkjerjkwherh; LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python -tt /home/dexter/.ansible/tmp/ansible-tmp-1314921202.26-267234556234/yum; rm -rf /home/dexter/.ansible/tmp/ansible-tmp-1314921202.26-267234556234/ >/dev/null 2>&1' 作为服务器名称的根。致命:所有主机都已失败——正在中止 您的主目录烫发可能有问题。或使用 noexec 选项安装 /home。看起来真的很奇怪。女巫 CentOS? 如果我弄错了,请纠正我,但如果 /home 安装了 noexec 选项,sudo 命令也不会在终端上工作。但它有效。另外,我的版本是 CentOS Linux release 7.0.1406 sudo_user 在这种情况下绝对是错误的,几乎在所有情况下都是错误的。编辑您的问题以显示完整的输出(-vvvv') without sudo_user` 但使用sudo: yes。@Dexter @tedder42 更新内容,在上方添加详细输出

以上是关于Ansible sudo 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Ansible 2.5.5 - “替换”模块中的属性之前不起作用

Ansible AWS 动态清单实例过滤器不起作用

当用户主目录安装在 NFS 卷上时,Ansible 不起作用

带有循环调试打印的ansible寄存器不起作用

使用 ansible-vault 加密私钥连接到远程主机不起作用

将 sed 的输出重定向到文件时,sudo 不起作用[重复]