已配置免密sudo用户,Ansible仍提示需输入sudo密码
我刚开始学习Ansible,编写了一个简单的Playbook,使用免密远程用户ansible执行apt安装命令,并配置了become: true等参数,代码如下:
--- - name: managing the ubuntu servers hosts: ubuntu_servers remote_user: ansible become: true become_method: sudo become_user: root tasks: - name: Installing a package on ubuntu servers apt: name: traceroute state: present update_cache: true
我已在服务器上验证ansible用户为免密sudoer,但执行Playbook时始终报错:
fatal: [server2]: FAILED! => {"msg": "Missing sudo password"}
fatal: [server3]: FAILED! => {"msg": "Missing sudo password"}
以下是可能的解决办法:
检查sudoers配置的正确性:确保
ansible用户的免密sudo规则配置无误。用visudo命令编辑/etc/sudoers或/etc/sudoers.d/下的对应文件,规则格式必须为:ansible ALL=(ALL) NOPASSWD: ALL注意
NOPASSWD为大写,末尾的ALL不能省略(否则仅允许特定命令免密)。编辑完成后用sudo -l -U ansible验证规则是否生效。手动验证远程sudo免密:登录到server2、server3服务器,切换到
ansible用户,执行sudo apt install traceroute,确认是否需要输入密码。如果这里需要密码,说明sudo配置存在问题,优先修正该部分。调整Ansible执行参数:执行Playbook时添加
--become(或简写-b)参数,确保强制启用提权逻辑。另外检查本地ansible.cfg文件,若存在become_ask_pass = True配置,改为False避免Ansible主动询问sudo密码。重置sudo会话:部分sudo配置会限制免密会话时长,可在远程服务器执行
sudo -k重置sudo会话,再重新运行Playbook测试。
内容的提问来源于stack exchange,提问作者ESvi3

