我正在尝试设置 Ansible 来管理来自不同客户的 Linux 机箱,以下是我们必须处理的内容。
- 没有公钥认证——我和你一样想要它,但它不会很快发生。
- 我们以 root 身份登录,每个客户在所有 Linux 机器上都有不同的 root 密码。我们正在努力禁用直接 root 登录并通过 root 进行所有操作,
sudo
但同样,这需要一些时间。
我设法为每个客户创建一个 ansible 保险库文件,其中包含ansible_ssh_user
并ansible_ssh_pass
按照剧本运行良好。
---
- hosts:
- SERV01
- SERV02
vars_files:
- roles/common/vault/main.yml
tasks:
- name: enable and start ntpd
service: name=ntpd enabled=yes state=running
现在我想知道如何从命令行使用 Vault 文件,但以下方法均不起作用。
ansible customer1 -m shell -a "var_files:roles/common/vault/main.yml uptime" --ask-vault-pass
ansible customer1 -m shell -a "uptime" -e "vars_files:roles/common/vault/main.yml" --ask-vault-pass
我究竟做错了什么 ?
谢谢
答案1
最后我终于找到了方法:
ansible customer1 -e @group_vars/vault/customer1.yml --ask-vault-pass -m shell -a uptime
现在我可以将ansible_ssh_user
和ansible_ssh_pass
放入ansible_sudo_pass
保险库文件中,我只需要记住保险库密码。
我希望这也能让您更加享受 Ansible。
谢谢
答案2
尽管 OP 自己回答了这个问题,但我想分享我自己的答案。我发现 OP 的回答有几点不太清楚:
OP 使用的解决方案称为“group_vars”。要使用“group_vars”,您需要有一个“group_vars”目录,其中存放着您的 inventory.ini 文件。在目录中为每个组名(inventory.ini 中显示的对象[groupname]
)创建一个 .yaml 文件。因此,如果您的 inventory.ini 中有以下内容
[g1]
10.10.10.10
[g2]
10.10.11.10
如果您想在使用 group_vars 时为每个组创建单独的 ssh 会话,则需要创建以下文件:
./group_vars/g1.yaml
./group_vars/g2.yaml
在这些文件中,您可以输入变量,实际上是任何变量。但在本帖的问题背景下,您可以执行以下操作:
./group_vars/g1.yaml
ansible_ssh_user: "user1"
ansible_ssh_pass: "MyP4ss"
ansible_become_pass: "MyP4ss"
./group_vars/g2.yaml
ansible_ssh_user: "user2"
ansible_ssh_pass: "MyP4ssNew"
ansible_become_pass: "MyP4ssNew"
现在你可以运行你的 ansible playbook 而不需要传递额外的变量参数:
$ ansible-playbook -i ./inventory.ini myplaybook.yaml --ask-vault-pass
顺便说一句,您可以以相同的方式使用 ansible vault。为每个密码创建一个 vault 加密:
ansible-vault encrypt_string 'MyP4ss' --name 'ansible_ssh_pass'
ansible-vault encrypt_string 'MyP4ssNew' --name 'ansible_ssh_pass'
你会看到类似这样的内容:
ansible_ssh_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
66636431343633646639343661353330326634336565653430326662303039643634303564316132
313736323431653749839238373332303861353734393430340a3131336662316161633137343235363465303461613534373439333336306130316531363836323137376632
6335303031343732300a34363636646334613162643863386435303833373735383830343234626480859048029850329
3539
ansible_ssh_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
9387295873723633646639343661353330326634336565653430326662303039643634303564316132
313736323431653749839238373332303861353734393430340a3131336662316161633137343235363465303461613534373439333336306130316531363836323137376632
6335303031343732300a34363636646334613162643863386435303833373735383830343234626480859048029850329
4738
请注意,运行这些命令时,它会要求您每次更改 ansible vault 密码。它不会删除旧密码。如果您想保留上次使用的密码,只需输入相同的 ansible vault 密码即可。此外,“ansible_ssh_pass”只是一个参考名称,只要密码相同,您可以将其更改为任何您想要的名称。请注意下面我如何复制和粘贴它并每次更改参考名称。
现在只需从终端复制并粘贴到每个 group_var 文件中的密码变量中:
./group_vars/g1.yaml
ansible_ssh_user: user1
ansible_ssh_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
66636431343633646639343661353330326634336565653430326662303039643634303564316132
313736323431653749839238373332303861353734393430340a3131336662316161633137343235363465303461613534373439333336306130316531363836323137376632
6335303031343732300a34363636646334613162643863386435303833373735383830343234626480859048029850329
3539
ansible_become_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
66636431343633646639343661353330326634336565653430326662303039643634303564316132
313736323431653749839238373332303861353734393430340a3131336662316161633137343235363465303461613534373439333336306130316531363836323137376632
6335303031343732300a34363636646334613162643863386435303833373735383830343234626480859048029850329
3539
./group_vars/g1.yaml
ansible_ssh_user: user2
ansible_ssh_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
9387295873723633646639343661353330326634336565653430326662303039643634303564316132
313736323431653749839238373332303861353734393430340a3131336662316161633137343235363465303461613534373439333336306130316531363836323137376632
6335303031343732300a34363636646334613162643863386435303833373735383830343234626480859048029850329
4738
ansible_become_pass: !vault |
$ANSIBLE_VAULT;1.1;AES256
9387295873723633646639343661353330326634336565653430326662303039643634303564316132
313736323431653749839238373332303861353734393430340a3131336662316161633137343235363465303461613534373439333336306130316531363836323137376632
6335303031343732300a34363636646334613162643863386435303833373735383830343234626480859048029850329
4738
现在,您可以根据您的库存文件,以有组织的方式,使用不同的 ssh 登录凭证连接到多个主机。
这里还有关于使用 ansible group_vars 的文档: https://docs.ansible.com/ansible/latest/inventory_guide/intro_inventory.html
答案3
我不确定 Ansible 是否可以做到这一点。如果不能,一种方法是
ansible customer1 -e "`ansible-vault view roles/common/vault/main.yml | grep ansible_ssh_pass`" -m shell -a uptime