我在将Ansible配置适应我的环境方面遇到了一些困难。
我的测试环境:
我的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行为在哪里错了?
答案 0 :(得分:5)
这样想:
ansible_ssh_user
是以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
运行所有命令。