Ansible设置远程机器时出现”sudo: a password is required”错误

98次阅读
没有评论

问题描述

在使用Ansible设置远程机器时,遇到了以下问题:

FAILED! => {"changed": false, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

用户已经在playbook中使用了提升权限的方法,但在运行特定任务时仍然遇到了这个错误。

解决方案

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

方案1

尝试在任务中禁用提升权限,可以通过设置ansible_become变量为false来实现。以下是修改后的任务示例:

- name: Pushing Nebula configs to node
  synchronize:
    src: <local dir>
    dest: "/etc/<target_dir>/"
    dest_port: "{{ ssh_port }}"
    mode: push
  delegate_to: localhost
  vars:
    ansible_become: false

在上面的示例中,我们在任务中添加了vars部分,并将ansible_become变量设置为false。这将禁用提升权限,以避免出现”sudo: a password is required”错误。

方案2

如果禁用提升权限仍然无法解决问题,可以尝试使用其他方法来提升权限,例如使用become_userbecome_method。以下是修改后的任务示例:

- name: Pushing Nebula configs to node
  synchronize:
    src: <local dir>
    dest: "/etc/<target_dir>/"
    dest_port: "{{ ssh_port }}"
    mode: push
  delegate_to: localhost
  become: yes
  become_user: root

在上面的示例中,我们使用了becomebecome_user选项来提升权限。become: yes表示启用提升权限,become_user: root表示以root用户身份执行任务。根据实际情况,你可以根据需要修改become_user的值。

方案3

如果以上方法仍然无法解决问题,可能是因为远程机器需要sudo密码。你可以尝试在Ansible的配置文件中设置sudo密码,以便自动提供密码。以下是修改配置文件的步骤:
1. 打开Ansible的配置文件(通常位于/etc/ansible/ansible.cfg)。
2. 找到并取消注释#ask_pass = True这一行。
3. 将ask_pass的值设置为False,并在下面添加一行sudo_pass = your_sudo_password,将your_sudo_password替换为你的sudo密码。
4. 保存并关闭配置文件。
请注意,这种方法需要在配置文件中明文存储sudo密码,因此请确保配置文件的安全性。

方案4

如果以上方法仍然无法解决问题,可能是因为远程机器的sudo配置不正确。你可以尝试手动在远程机器上执行sudo命令,以确保sudo配置正确。以下是在远程机器上执行sudo命令的步骤:
1. 连接到远程机器。
2. 执行sudo -l命令,查看当前用户的sudo权限。
3. 如果sudo配置不正确,可以尝试修改sudo配置文件(通常位于/etc/sudoers)或联系系统管理员进行修复。
请注意,在修改sudo配置文件之前,请确保你对sudo配置有足够的了解,并且备份配置文件以防止意外情况发生。
以上是几种可能的解决方案,根据具体情况选择适合的方法来解决”sudo: a password is required”错误。如果问题仍然存在,请检查远程机器的sudo配置和权限设置,并确保Ansible的配置正确。

正文完