使用Ansible通过su提权时遇特权升级超时问题求助
排查思路与解决方案
核心问题分析
Ansible通过su提权时未能正确匹配远程主机的提权提示符,导致等待超时无法完成Facts收集。
1. 验证提权提示符匹配
CentOS 7默认的su提权提示符为Password:,但可能因系统本地化配置、PAM规则修改等变为其他形式(如中文环境的密码:)。Ansible默认的提示符匹配规则可能不兼容,需手动指定:
- 在Inventory文件中添加变量:
avm-p ansible_host=你的主机IP ansible_become_prompt="^Password:" - 或在Playbook中定义变量:
- name: Configure sudo rights hosts: new_hosts become: True become_method: su become_flags: "-" vars: ansible_become_prompt: "^Password:" # 匹配远程实际的su提示符 roles: - sudoers
2. 调整become_flags参数
你当前使用的become_flags: "-"会触发登录式shell(su - root),可能导致提示符环境变化。可尝试:
- 暂时移除
become_flags,使用默认的非登录式shell(su root)测试 - 若必须保留登录式shell,确保提示符匹配规则覆盖该场景下的输出
3. 开启调试日志定位细节
执行Playbook时添加-vvvv参数,查看完整的提权交互过程,确认Ansible发送的命令、接收的输出是否符合预期:
ansible-playbook -i new.hosts -u xyzRescue --become-user root --ask-pass --ask-become-pass --become-method=su sudoers.yml -vvvv
重点关注日志中waiting for privilege escalation prompt相关的输出,对比远程实际的提示符内容。
4. 手动验证su提权流程
直接登录目标主机的xyzRescue用户,手动执行su - root,观察:
- 提权时的提示符内容
- 是否能正常输入root密码切换权限
排除因系统配置(如PAM限制、用户权限)导致的提权失败
5. 调整提权超时时间
若因网络延迟或系统响应慢导致超时,可在Inventory或Playbook中延长超时时间:
vars: ansible_become_timeout: 120 # 超时时间改为120秒
内容的提问来源于stack exchange,提问作者Peter Evans
相关产品推荐
相关产品推荐

