问题描述
在使用Ansible Playbook时,遇到一个问题:即使没有指定become用户,每次运行Playbook时都会交互式地要求输入Become密码。用户希望找到解决办法,以便能够将此Playbook作为脚本的一部分进行部署。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据回答1,你在运行ansible-playbook
命令时使用了-K
选项,这会导致提示输入特权升级密码。根据官方文档,-K
选项的含义是:
-K, –ask-become-pass:询问特权升级密码
尝试在运行ansible-playbook
命令时不使用-K
选项,即可解决该问题。
方案2
如果你希望在运行Playbook时不手动输入Become密码,可以在Ansible配置文件中进行相应的设置。你可以在ansible.cfg
文件中添加以下配置:
[privilege_escalation]
become=False
这将禁用特权升级功能,从而避免提示输入Become密码。请确保在运行Playbook之前备份ansible.cfg
文件,以防止意外情况发生。
方案3
如果你希望在运行Playbook时自动提供Become密码,可以在Ansible配置文件中进行相应的设置。你可以在ansible.cfg
文件中添加以下配置:
[privilege_escalation]
become=True
become_ask_pass=False
这将启用特权升级功能,并禁用提示输入Become密码。请注意,这样做可能会带来一定的安全风险,因为密码将以明文形式存储在配置文件中。请确保在运行Playbook之前备份ansible.cfg
文件,并确保只有受信任的用户可以访问该文件。
方案4
如果你希望在运行Playbook时自动提供Become密码,但又不想将密码明文存储在配置文件中,可以考虑使用Ansible Vault来加密密码。以下是一些基本步骤:
1. 使用ansible-vault
命令创建一个加密文件,例如passwords.yml
:
bash
ansible-vault create passwords.yml
2. 在加密文件中添加Become密码,例如:
yaml
become_password: your_become_password
3. 在Playbook中使用ansible-vault
命令来解密加密文件,并将密码传递给特权升级:
yaml
- name: Execute the Provisioning script
command: sh ./prod-setup.sh
become: true
become_password: "{{ lookup('file', 'passwords.yml') | from_yaml }}"
这将从加密文件中读取Become密码,并将其传递给特权升级。
请注意,使用Ansible Vault加密密码可以提高安全性,但也会增加管理和维护的复杂性。请确保妥善保管加密文件,并确保只有授权的用户可以访问它。
以上是几种解决方案,你可以根据自己的需求选择适合的方法来解决该问题。希望能帮助到你!