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



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

测试环境:

  • 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的身份运行所有命令,无需密码

相关内容

最新更新