&引用;sudo ansible剧本“;即使使用--user选项,命令也会失败

&引用;sudo ansible剧本“;即使使用--user选项,命令也会失败,ansible,sudo,Ansible,Sudo,我有一个用户foo,它能够对a(self)和B执行无密码ssh。playbook需要sudo访问,我正在使用been升级其中,下面的命令工作正常 ansible-playbook -i ../inventory.ini --user=foo --become --become-user=root echo_playbook.yml 但是上面的命令是shell脚本的一部分,它没有foo的权限。所以,当我使用sudo触发shell脚本时,ansible说主机不可访问。因此,我使用sudo尝试了an

我有一个用户foo,它能够对a(self)和B执行无密码ssh。playbook需要sudo访问,我正在使用been升级其中,下面的命令工作正常

ansible-playbook -i ../inventory.ini --user=foo --become --become-user=root echo_playbook.yml
但是上面的命令是shell脚本的一部分,它没有foo的权限。所以,当我使用sudo触发shell脚本时,ansible说主机不可访问。因此,我使用sudo尝试了ansible命令,如下所示。这表明主机无法访问

sudo ansible-playbook -i ../inventory.ini --user=foo --become --become-user=root echo_playbook.yml
我同意sudo正在将ansible剧本升级到root。但我还提供了
--user
来告诉ansible,ssh需要使用“foo”用户

基本上我需要sudo来访问剧本。要连接到其他服务器,我需要foo用户。要执行playbook中的操作(playbook中的命令),我需要再次使用sudo(我正在使用它)


我做错什么了吗?有人能告诉我在上面的场景中ansible playbook需要作为sudo ansible playbook运行的确切命令吗?

我不太清楚您的确切位置。我不认为你会混淆远程用户和本地用户。如果playbook作为
foo
,根据您的描述,我只能猜测
~foo/.ssh/id\u rsa
或另一个自动提供的密钥验证
foo
。但是,如果愿意,您可以为任何用户生成密钥,并允许其访问远程
foo
。或者,您可以作为其他用户运行playbook。这取决于你。唯一不起作用的是依赖于特定用户的环境或配置,然后不提供它

上面的命令是shell脚本的一部分,该脚本没有foo权限

我听到的是:

  • 用户
    foo
    可以成功运行ansible作业
  • 运行的脚本(在根目录下)无法运行ansible作业
如果您对ansible如何为
foo
用户工作感到满意,您可以切换到
foo
用户来运行ansible:

sudo -u foo ansible-playbook ...

如果脚本以root用户身份运行,sudo将始终成功。否则,您可以对一个或多个命令执行命令。

Sudo不会影响其他命令上的用户systems@DanielFarrell但它将权限更改为在同一系统中的root,并且在尝试ssh时,ansible使用root和root的密钥,而不是foo的密钥,而foo的密钥不可用。您说您的主机无法访问。但这不太可能受到尝试请求的用户的影响。无论是否使用sudo,主机不可访问都会出现网络错误或主机名可能被错误指定。您应该始终在问题中包含确切的错误。在没有sudo的情况下,ansible将作为foo运行,并将foo的密钥用于ssh,这将起作用。使用sudo时,ansible将以root身份运行,并获取不可用的ssh的root密钥,ansible将抛出主机无法访问的错误,因为它无法执行无密码ssh。exat错误将是:无法通过ssh连接到主机上的
错误:
。没有sudo运行时不会出现上述错误。使用sudo运行时,服务器不太可能会停机。您应该在ansible playbook中的
hosts:
之后设置
sudo:yes
。这将确保正在执行的任务将在需要时使用sudo。我只遵循类似的方法。我使用了
su-foo-c“ansible…”
命令,因为
sudo-u-foo
需要在sudoers文件中输入类似的条目。使用sudo运行脚本时,它已经拥有root权限,ansible的
su foo
没有要求密码。