Ansible执行提权任务报提权提示等待超时错误问题咨询
故障产生原因
该报错是Ansible提权逻辑配置错误,非交互式执行时无法响应密码输入提示导致超时,具体原因如下:
- 你的剧本提权配置存在逻辑冲突:同时指定
become_method: sudo和become_flags: su,Ansible会在目标主机执行sudo su命令完成提权,但如果你的sudo规则没有配置免密,Ansible运行时为非交互模式,无法响应sudo的密码输入提示符,就会卡在提权步骤直到超时。 - 手动执行
sudo su是交互式场景,你可以手动输入密码完成提权,和Ansible的非交互执行逻辑不一致,因此手动操作正常不代表Ansible配置正确。
排查解决步骤
- 优先修正提权配置:切换到root无需混用sudo和su两种提权方式,删除冗余的
become_flags: su配置即可,修改后的任务代码如下:
- name: Download Java to Latest Version become: yes become_method: sudo become_user: root shell: | cd /home wget -c --header "Cookie: oraclelicense=accept-securebackup-cookie" {{javaurl}} tar -xzvf ./jdk-*.tar.gz rm ./jdk-*.tar.gz
- 如果你当前用户执行sudo需要输入密码,运行playbook时添加
-K(--ask-become-pass的缩写)参数,主动传入提权密码:ansible-playbook 你的剧本文件名.yml -K - 如需免密执行Ansible任务,登录目标主机执行
visudo编辑sudo规则,添加如下配置后保存即可:ra ALL=(ALL) NOPASSWD: ALL - 如果你要使用su作为提权方式,直接修改提权参数即可,无需和sudo混用:
become: yes become_method: su become_user: root
若su设置了密码,运行playbook时同样添加-K参数传入密码即可。
内容的提问来源于stack exchange,提问作者Rajarshi Das
相关产品推荐
相关产品推荐

