Ansible本地执行Python脚本报错:sudo需要密码问题咨询
解决Ansible执行本地脚本时的
sudo: a password is required错误 这个报错逻辑很清晰——你把任务delegate_to到本地主机(127.0.0.1)后,因为playbook全局设置了become: true,Ansible会尝试用sudo执行这个Python脚本,但本地的sudo需要密码,而Ansible没有获取到这个密码,所以任务直接失败了。下面给你几个可行的解决办法:
方法1:如果本地执行脚本不需要sudo权限
直接在这个任务里禁用become,覆盖playbook全局的become: true设置就行:
- name: execute install script command: python myscript.py -i "{{ inventory_hostname }}" -f script.cql -u username -p password delegate_to: 127.0.0.1 become: false
(顺便提一句:你的命令里-u username-p password看起来像是笔误,应该是-u username -p password吧?记得检查下命令格式是否正确)
方法2:需要sudo权限的话,提供sudo密码
临时输入密码(推荐,更安全)
执行playbook的时候加上-K(或者全写--ask-become-pass)参数,Ansible会提示你输入本地的sudo密码:
ansible-playbook your_playbook.yml -K
配置密码(不推荐明文,建议加密)
如果你不想每次都输入密码,可以把sudo密码配置到inventory或者playbook里,但一定要用Ansible Vault加密,绝对不要明文存储密码:
- 在inventory文件里添加:
localhost ansible_become_pass=your_local_sudo_password - 或者在playbook的vars里设置:
vars: ansible_become_pass: your_local_sudo_password
加密变量文件的命令:
ansible-vault encrypt your_vars_file.yml
执行playbook时需要加上--ask-vault-pass来解密文件。
方法3:配置本地sudoers免密执行该脚本
如果你希望特定用户执行这个Python脚本时不需要输入sudo密码,可以编辑sudoers文件(必须用visudo命令,避免语法错误破坏sudo功能):
visudo
添加一行:
your_local_username ALL=(ALL) NOPASSWD: /usr/bin/python /full/path/to/myscript.py
这样Ansible执行这个脚本时就不会触发密码提示了。
内容的提问来源于stack exchange,提问作者cad
相关产品推荐
相关产品推荐

