Ansible的become是替代旧版sudo/su、统一管理提权的核心机制,需配合被控端sudoers授权(如alice ALL=(ALL) NOPASSWD:ALL)才能生效;其配置优先级为命令行>playbook>inventory>ansible.cfg,常用参数包括become=true、become_method=sudo、become_user=root。

在 Ansible 中,become 是实现远程 sudo 提权的核心机制,它替代了旧版的 sudo 和 su 参数,统一管理权限提升行为。配置得当,普通用户就能安全、批量地执行需 root 权限的任务,无需暴露 root 密码或长期使用 root 登录。
become 基础配置项说明
这些参数通常写在 ansible.cfg 的 [privilege_escalation] 区块,或直接定义在 playbook / inventory / 命令行中:
- become=true:启用提权(默认为 false)
-
become_method=sudo:指定提权方式,常见值有
sudo、su、dnf(较少用),生产环境基本固定为sudo -
become_user=root:指定提权后切换到的目标用户,默认就是
root -
become_ask_pass=false:是否交互式输入 sudo 密码;若已配置 NOPASSWD,应设为
false;若仍需输密码,可设为true并配合--ask-become-pass使用
配套前提:被控端必须完成 sudo 授权
Ansible 的 become 能否成功,取决于被控主机上对应用户的 sudo 权限是否已正确配置。例如,若用 alice 用户连接,则需确保:
-
alice已存在(可用user模块创建) -
/etc/sudoers中包含授权行:alice ALL=(ALL) NOPASSWD:ALL - 推荐用
lineinfile模块追加,避免手动编辑出错:ansible all -m lineinfile -a "path=/etc/sudoers line='alice ALL=(ALL) NOPASSWD:ALL' validate='visudo -cf %s'
三种典型配置位置与优先级
become 行为可定义在多个层级,优先级从高到低为:命令行 > playbook > inventory > ansible.cfg
-
Playbook 级(最常用、最清晰):
在 play 顶层或 task 级设置,如:
become: true<br> become_method: sudo<br> become_user: root
-
Inventory 主机变量(灵活适配不同节点):
在hosts文件中为某台主机单独指定:db01 ansible_become=yes ansible_become_method=sudo ansible_become_user=deploy -
全局配置(适合统一策略):
编辑/etc/ansible/ansible.cfg或~/.ansible.cfg:
[privilege_escalation]<br> become=true<br> become_method=sudo<br> become_user=root
验证提权是否生效
部署前建议快速验证,避免任务执行失败:
- 用
command模块运行需 root 的命令:ansible web -m command -a 'whoami'→ 应返回root - 检查敏感路径是否可写:
ansible web -m file -a 'path=/etc/shadow state=touch'(若报错则提权未生效) - 结合
-vvv查看详细日志,确认是否调用了sudo命令及参数

















