我正在尝试开发Ansible Playbook,该书执行一系列维护步骤,例如更新OS和清理临时文件。其中一些命令,例如 reboot 或 systemd 需要root特权。 Ansible文档指出 become 属性是提升访问权限的适当方法:
- name: reboot the host
become: true
reboot:
reboot_timeout: 120
不幸的是,执行剧本的用户没有完全的sudo访问权限。相反,某些命令在sudoers文件中列入了白名单。
我遇到的问题是Ansible似乎使用 / bin / sh 执行所有提升的命令。具体来说,我检查并记录了sudo become plugin的返回值,发现提升的命令似乎像这样包装在shell脚本中:
sudo /bin/sh -c 'echo BECOME-SUCCESS-sddadrnobshlgupsldsqcunalofnshjx ; /usr/bin/python /tmp/.ansible/tmp/ansible-tmp-1581373432.4900978-226016980552294/AnsiballZ_command.py
由于未向该用户授予通用的高级Shell访问权限,因此该步骤自然会失败。这令人沮丧,因为直接调用该命令似乎确实有效:
- name: reboot the host
command: sudo reboot
async: 1
poll: 0
- name: wait for connection
wait_for_connection:
connect_timeout: 20
sleep: 5
delay: 5
timeout: 120
我想知道是否有比不使用 bevome 或为相关用户提供完全root访问权限更好的方法来解决此问题。