我如何指定一个sudo密码Ansible在非交互的方式?
我是这样运行Ansible剧本的:
$ ansible-playbook playbook.yml -i inventory.ini \
--user=username --ask-sudo-pass
但我想这样运行它:
$ ansible-playbook playbook.yml -i inventory.ini \
--user=username` **--sudo-pass=12345**
有办法吗?我希望尽可能地自动化我的项目部署。
你可以使用ansible vault,它会把你的密码编码成加密的vault。之后,你可以使用变量从金库在剧本。
ansible vault的一些文档:
http://docs.ansible.com/playbooks_vault.html
我们使用它作为每个环境的保险库。要编辑vault,我们有如下命令:
Ansible-vault编辑库存/生产/group_vars/all/vault
如果你想调用保险库变量,你必须使用ansible-playbook的参数如下:
Ansible-playbook -s——vault-password-file=~/.ansible_vault.password
是的,我们存储仓库密码在本地目录明文,但这不是更危险的存储根密码为每个系统。根密码在保险库文件中,或者您可以将它像sudoers文件一样用于您的用户/组。
我建议在服务器上使用sudoers文件。下面是组管理的示例:
%admin所有=(所有)NOPASSWD:所有
我的黑客自动化这是使用一个环境变量,并通过——extralvars =“ansible_become_pass='{{lookup('env', ' ansible_become_pass ')}}'”访问它。
导出一个env变量,但避免bash/shell历史记录(前面有一个空格或其他方法)。例如:
export ANSIBLE_BECOME_PASS='<your password>'
查找env变量,同时将额外的ansible_become_pass变量传递到ansible-playbook中,例如:
ansible-playbook playbook.yml -i inventories/dev/hosts.yml -u user --extra-vars="ansible_become_pass='{{ lookup('env', 'ANSIBLE_BECOME_PASS') }}'"
好的替代答案:
@toast38coza: simply use a vaulted value for ansible_become_pass. This is decent. However, for the paranoid teams that need to share ansible vault passwords, and execute ansible plays with induvidual accounts, they coudld use the shared vault password to reverse each others operating system password (identiy theft). Arguably, you need to trust your own team?
@slm's bash subshell output generated to temp file descriptor and using the @ prefix to read the ansible variable from the file desriptor. Avoids bash history at least. Not sure, but hopefully subshell echo doesn't get caught and exposed in audit logging (e.g. auditd).
你可以在剧本执行时传递它。语法是-
ansible-playbook -i inventory my.yml \
--extra-vars 'ansible_become_pass=YOUR-PASSWORD-HERE'
但出于安全考虑,这并不是一个好主意。最好使用可靠的拱顶
首先更新你的库存文件如下:
[cluster:vars]
k_ver="linux-image-4.13.0-26-generic"
ansible_user=vivek # ssh login user
ansible_become=yes # use sudo
ansible_become_method=sudo
ansible_become_pass='{{ my_cluser_sudo_pass }}'
[cluster]
www1
www2
www3
db1
db2
cache1
cache2
接下来,创建一个名为password的新加密数据文件。Yml,执行如下命令:
$ ansible-vault create passwd.yml
设置保险箱密码。在提供密码后,该工具将启动您用$ editor定义的任何编辑器。附加以下内容
my_cluser_sudo_pass: your_sudo_password_for_remote_servers
在vi/vim中保存并关闭文件。最后运行playbook如下:
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwd.yml' my.yml
如何重新编辑我的加密文件
ansible-vault edit passwd.yml
如何更改加密文件的密码
ansible-vault rekey passwd.yml