我在适应我的环境时遇到了一些困难。
测试环境:
- PermitRootLogin没有
- 只允许一个用户通过SSH连接(foo,没有任何权限)
- 具有sudo权限的用户(bar ALL=(ALL) ALL)
我的可见主机目录是这样的:
[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 password执行相同的命令:
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和bar密码),Ansible给我返回:
server1 | FAILED | rc=1 >>
echo test > /etc/testfile : Permission denied
当我在主机上作为bar登录并执行"sudo echo test>/etc/testfile"时,它会询问我bar密码并正确执行命令。
这样想:
-
ansible_ssh_user
是作为 ssh到主机的用户。 -
ansible_sudo_user
是要在 主机上sudo的用户。
换句话说,以您的用户和命令为例,ansible将运行的等效命令如下:
ssh foo@server1 sudo -u bar "echo test > testfile"
因此需要提供foo
用户的密码,而不是bar
用户的密码。foo
用户需要以bar
的身份进行sudo操作。sudoers
:
foo ALL=(bar) NOPASSWD: ALL
现在foo
可以以bar
的身份运行所有命令,无需密码