我有一个环境,用户的sudo密码在几台服务器上不一样。这可以看作是一个安全功能:-D
我想在文件中保存sudo密码(在时间点放置保险库/安全性):
在我的ansible剧本中,我正在使用类似的东西:
---
- hosts: all
tasks:
- include: '{{ inventory_hostname }}'
vars:
ansible_become: true
ansible_become_user: root
ansible_become_pass: "{{ lookup('file','{{ inventory_hostname }}.sudopwd') }}"
如果每个主机有一个文件,它的效果很好。 现在我怎样才能让它变得更有活力"?
我要说的是,我有一个名为searchsudopwd
的脚本,它是一个简单的bash脚本(实际上可以是任何语言)。
#!/usr/bin/env bash
if [[ "$1" == "host1" ]]; then
echo "pwd1"
elif [[ "$1" == "host2" ]]; then
echo "pwd2"
else
echo "default pwd"
fi
如何将其与ansible一起使用?我的剧本需要改变什么才能使其发挥作用?
我尝试过类似的事情:
---
- hosts: all
tasks:
- include: '{{ inventory_hostname }}'
vars:
ansible_become: true
ansible_become_user: root
ansible_become_pass: "{{ item }}"
with_lines: searchsudopwd '{{ inventory_hostname }}'
但它不起作用......
如果我的想法不起作用,有没有办法像"默认"密码,只获取特定主机的密码?
感谢您的帮助和时间!
答案 0 :(得分:1)
我认为您最好在需要时将密码放在单个host_vars文件中,并将默认设置放在group_vars / all中。把它全部放在Ansible Vault中。 (但是你有一个Ansible Vault的共享密码。)
我有一个名为" ml01"所以我改变了你的剧本:
$ cat /home/jscheible/searchsudopwd
#!/usr/bin/env bash
if [[ "$1" == "ml01" ]]; then
echo "pwd1"
elif [[ "$1" == "host2" ]]; then
echo "pwd2"
else
echo "default pwd"
fi
要使用密码调用该本地程序,只需在delegate_to: localhost
:
$ cat show_pwd
---
- hosts: all
connection: ssh
gather_facts: false
tasks:
- name: Do passwd lookup
command: /home/jscheible/searchsudopwd {{ inventory_hostname }}
delegate_to: localhost
register: result
- name: Show results
debug:
var: result.stdout
delegate_to: localhost
以下是我的测试结果:
$ ansible-playbook show_pwd
PLAY [all] *********************************************************************
TASK [Do passwd lookup] ********************************************************
changed: [al01 -> localhost]
changed: [ml01 -> localhost]
TASK [Show results] ************************************************************
ok: [al01 -> localhost] => {
"result.stdout": "default pwd"
}
ok: [ml01 -> localhost] => {
"result.stdout": "pwd1"
}
PLAY RECAP *********************************************************************
答案 1 :(得分:1)
有方便的lookup plugins。
您实际上只需用file
查询替换pipe
查找:
ansible_become_pass: "{{ lookup('pipe','/path_on_ansible_machine/searchsudopwd '+inventory_hostname) }}"