ansible_become在GCP主机上执行sudo没有效果

58次阅读
没有评论

问题描述

在使用Ansible在GCP上执行命令时遇到了问题。他想在目标主机上执行以下命令:ansible all -a "head -1 /etc/shadow"。这个命令需要root权限。但是在默认的Ansible配置下,他遇到了以下错误:

host1 | FAILED | rc=1 >>head: cannot open '/etc/shadow' for reading: Permission deniednon-zero return code

因此,他在ansible.cfg中进行了以下配置:

remote_user = gcp_user
ansible_become=yes
ansible_become_method=sudo
ansible_become_user=root

尽管进行了这些更改,他仍然无法运行上述命令。他仍然遇到相同的错误。然而,他可以执行以下命令:ansible all -a "sudo cat /etc/shadow"。因此,似乎ansible_become_user没有起作用。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Ansible中,ansible_becomeansible_become_user是用于提升权限的选项。但是在某些情况下,这些选项可能不起作用。以下是一些可能导致这个问题的原因和解决方法:
1. 检查目标主机上的sudo配置:确保目标主机上的sudo配置允许使用ansible_become_user提升权限。可以通过在目标主机上执行sudo -l命令来检查。
2. 检查Ansible版本:某些旧版本的Ansible可能存在与ansible_becomeansible_become_user相关的问题。尝试升级到最新版本的Ansible。
3. 检查Ansible配置文件:确保在正确的配置文件中进行了更改。可以通过在命令行中运行ansible --version命令来查看Ansible使用的配置文件路径。
4. 检查Ansible配置文件中的其他选项:有些选项可能会覆盖ansible_becomeansible_become_user的设置。检查配置文件中是否有其他与权限提升相关的选项,并确保它们没有覆盖ansible_becomeansible_become_user的设置。
5. 检查Ansible playbook中的其他任务:如果在Ansible playbook中有其他任务使用了sudobecome选项,可能会影响到ansible_become_user的设置。确保其他任务中的权限提升选项与ansible_become_user一致。
6. 检查目标主机上的sudoers文件:如果目标主机上的sudoers文件中有其他配置可能会影响到ansible_become_user的设置。确保sudoers文件中没有与ansible_become_user冲突的配置。

方案2

如果以上解决方案都无效,可以尝试使用--become参数来提升权限。
在执行Ansible命令时,可以尝试使用--become参数来提升权限。以下是使用--become参数的示例命令:

ansible all -a "head -1 /etc/shadow" --become

使用--become参数时,不需要在ansible.cfg中进行任何更改。这将使用默认的权限提升方法来执行命令。
请注意,使用--become参数时,需要确保目标主机上的sudo配置允许使用当前用户提升权限。

方案3

如果以上解决方案都无效,可以尝试使用sudo模块来执行命令。
如果ansible_becomeansible_become_user选项无法正常工作,可以尝试使用Ansible的sudo模块来执行命令。以下是使用sudo模块的示例任务:

- name: Execute command with sudo
  hosts: all
  tasks:
    - name: Run command
      sudo: yes
      shell: head -1 /etc/shadow

在上面的示例中,我们使用sudo模块来执行命令。这将使用sudo权限来执行命令,而不依赖于ansible_becomeansible_become_user选项。
请注意,使用sudo模块时,需要确保目标主机上的sudo配置允许使用当前用户提升权限。

总结

在使用Ansible在GCP上执行命令时,如果ansible_becomeansible_become_user选项无法正常工作,可以尝试检查sudo配置、升级Ansible版本、检查Ansible配置文件和其他选项、检查Ansible playbook中的其他任务以及使用--become参数或sudo模块来提升权限。

正文完