You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

以slurm用户运行Ansible时ansible.legacy.setup执行失败的解决方法

问题描述

节点启动时以slurm用户执行Ansible playbook,在收集事实(Gathering Facts)阶段失败,报错提示sudo需要密码。该playbook用普通ubuntu用户执行可正常运行,求高效调试方案。

报错详情

TASK [Gathering Facts] *********************************************************
task path: /opt/playbook/site.yml:1
Using module file /usr/local/lib/python3.10/dist-packages/ansible/modules/setup.py
Pipelining is enabled.
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: slurm
<localhost> EXEC /bin/sh -c 'sudo -H -S -n  -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-mvloemssulwwmnnhtatxivyevcbshjsb ; /usr/bin/python3'"'"' && sleep 0'
fatal: [localhost]: FAILED! => {
    "ansible_facts": {},
    "changed": false,
    "failed_modules": {
        "ansible.legacy.setup": {
            "failed": true,
            "module_stderr": "sudo: a password is required
",
            "module_stdout": "",
            "msg": "MODULE FAILURE
See stdout/stderr for the exact error",
            "rc": 1
        }
    },
    "msg": "The following modules failed to execute: ansible.legacy.setup
"
}

简化后的host文件内容

vpn:
  children:
    master:
      hosts:
        localhost:
          ansible_connection: local
          ansible_python_interpreter: /usr/bin/python3
          ansible_user: ubuntu
          ip: localhost
调试与解决方法
  • 配置slurm用户的免密sudo权限:
    用visudo编辑sudoers文件(避免语法错误导致sudo失效),添加规则让slurm用户无需密码执行sudo:

    slurm ALL=(ALL) NOPASSWD: ALL
    

    为降低安全风险,也可仅授权必要命令,比如只允许执行python3:

    slurm ALL=(ALL) NOPASSWD: /usr/bin/python3
    
  • 验证host文件配置的执行逻辑:
    当前host文件指定了ansible_user: ubuntu,但实际执行用户是slurm,需确认playbook是否强制启用了become,或连接配置是否被覆盖。可尝试显式指定用户执行playbook:

    ansible-playbook -i hosts site.yml --user=ubuntu --become
    
  • 直接测试slurm用户的sudo能力:
    切换到slurm用户,执行sudo -n /usr/bin/python3,若报错说明sudo权限未配置正确;若能正常执行,再测试ansible连接:

    ansible localhost -i hosts -m setup -u ubuntu --become
    

    逐步排查是sudo权限问题还是ansible配置逻辑问题。

  • 明确ansible的become配置:
    在host文件的localhost条目下添加become相关参数,明确免密规则:

    ansible_become: yes
    ansible_become_method: sudo
    ansible_become_user: root
    ansible_become_password: ""
    

内容的提问来源于stack exchange,提问作者Xaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:53:27