Ansible SSH作为一个用户而Sudo作为另一个用户

时间:2014-07-14 18:14:38

标签: ssh ansible sudo ansible-inventory ansible-ad-hoc

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

我的测试环境:

  • PermitRootLogin no
  • 只允许一个用户通过SSH连接(foo,没有任何权限)
  • 具有sudo权限的用户(栏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密钥。

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

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给我回报:

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

当我在主机上以条形码登录并执行“sudo echo test> / etc / testfile”时,它会向我询问条形码密码并正确执行命令。 Ansible行为在哪里错了?

1 个答案:

答案 0 :(得分:5)

这样想:

  • ansible_ssh_user是以
  • 身份ssh到主机的用户
  • ansible_sudo_user是主机上的sudo用户

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

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

因此,需要提供foo用户的密码,而不是bar用户。 foo用户需要sudo权限bar。在sudoers

中有类似的内容
foo    ALL=(bar) NOPASSWD: ALL

现在foo可以在没有密码的情况下以bar运行所有命令。