6

我在将 Ansible 配置适应我的环境时遇到了一些困难。

我的测试环境:

  • PermitRootLogin 否
  • 只允许一个用户通过 SSH 连接(foo,没有任何权限)
  • 具有 sudo 权限的用户(bar ALL=(ALL) ALL)

我的 ansible 主机清单如下所示:

[servers]
server1 ansible_ssh_host=192.168.0.1 ansible_sudo=true ansible_ssh_user=foo ansible_sudo_user=bar

我有一个 foo 用户的 SSH 密钥。

当我使用 bar 密码尝试此临时命令(或任何其他命令)时:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass
server1 | FAILED => Incorrect sudo password

然后,如果我使用 foo 密码执行相同的命令:

ansible server1 -m raw -a "echo test > /etc/testfile" --ask-sudo-pass
Sorry, user foo is not allowed to execute '/bin/bash -c echo SUDO-SUCCESS-rlpfhamukjnsfyokqbjpbttviiuildif; echo test > /etc/testfile' as bar on server1.

所以 Ansible 绝对使用 foo 作为 sudo 用户,而不是我指定的 bar。有没有办法强制使用 bar 而不是 foo?我真的不了解 Ansible 上的 sudo 功能,即使我对所有内容(SSH 栏和密码栏)都使用相同的用户 ansible give 返回我:

server1 | FAILED | rc=1 >>
echo test > /etc/testfile : Permission denied

当我在主机上以 bar 身份登录并执行“sudo echo test > /etc/testfile”时,它会询问我 bar 密码并正确执行命令。我对 Ansible 的行为有什么误解?

4

1 回答 1

5

可以这样想:

  • ansible_ssh_user是 ssh 到主机的用户
  • ansible_sudo_user是要在主机上执行 sudo 的用户

换句话说,以您的用户和命令为例,ansible 将运行的等效命令是:

ssh foo@server1 sudo -u bar "echo test > testfile"

因此foo需要提供用户的密码,而不是bar用户。foo用户需要 sudo as的权限bar。像这样的东西sudoers

foo    ALL=(bar) NOPASSWD: ALL

现在可以像没有密码foo一样运行所有命令。bar

于 2014-07-14T21:29:48.983 回答