我有一个没有密码的用户,并且希望 Ansible 能够以sudo
该用户的身份使用,而无需添加NOPASSWD
到 sudoers 文件中。Ansible 抱怨:FAILED! => {"msg": "Missing sudo password"}
更详细地说:有两个用户,my_user
和root
。root
受密码保护。my_user
没有密码,可通过私有 SSH 密钥访问。sudoers 文件包含%sudo ALL=(ALL:ALL) ALL
。手动尝试使用sudo
frommy_user
可以正常工作,而不会收到任何密码提示。
剧本:
- name: VM deployment
hosts: localhost
gather_facts: false
- name: "Add the VM as an ansible host"
ansible.builtin.add_host:
name: '{{ my_ip }}'
groups:
- my_vm
ansible_ssh_private_key_file: "~/.ssh/id_rsa"
ansible_user: 'my_user'
- name: "VM configuration"
hosts: my_vm
gather_facts: false
- name: Install some packages
ansible.builtin.apt:
deb: "/tmp/somepackage.deb"
become: true # FAILED! => {"msg": "Missing sudo password"}
become_method: sudo
从现有问题来看,我发现更改 sudoers 行可以%sudo ALL=(ALL:ALL) NOPASSWD:ALL
解决问题。我宁愿不这样做,因为对于这个用户(已经没有密码)来说,这应该不是必要的:
# This works
- name: Install some packages
ansible.builtin.command:
cmd: 'sudo apt-get install -y /tmp/somepackage.deb'
是否有一个好的方法可以使它不经过编辑而工作/etc/sudoers
?