ansible 批量推送公钥
配置ansible 变量资产方式配置远程节点密码
关闭ansible检测节点公钥
vim /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False
配置资产变量
vim /etc/ansible/hosts #或者资产清单文件 hosts.ini
[webserver]
host1 ansible_ssh_user=test ansible_ssh_pass=1
host2
host3
[mysql]
host4
host5
[webserver:vars]
ansible_ssh_user=test
ansible_ssh_pass=1
[allserver:children]
webserver
mysql
[allserver:vars]
ansible_ssh_user=test
ansible_ssh_pass=1
利用 authorized_key 模块传送公钥
ansible allserver -m authorized_key -a "user=test state=present key={{ lookup('file', '/root/.ssh/id_rsa.pub') }}"
模块选项:
user 指定和远程服务器的这个用户建立信任关系
state 可选值:
- present 添加公钥
- absent 删除公钥
- key 本机用户的公钥,需要使用 lookup 查找到设置的公钥文件
playbook方式
生成一个加密文件
ansible-vault create vault-foo.yml
New Vault password: # 输入解密这个这文件的密码
Confirm New Vault password: # 再次确认密码
#输入密码后会进入vi编辑模式
#添加变量值
ansible_ssh_pass: 1
再次编辑需要执行
ansible-vault edit vault-foo.yml
Vault password:
编辑playbook
---
- hosts: all
remote_user: root # 连接远程主机的用户,密码是就是加密文件中设置好的 ansible_ssh_pass
vars_files:
- foo.yml 加密文件
tasks:
- name: set authorized key taken from file
authorized_key: #发送公钥的模块
user: root #给这个用户发送公钥
state: present
key: "{{ lookup \('file','/root/.ssh/id_rsa.pub') }}"
...
执行playbook
需要使用 --ask-vault-pass 参数指定一下解密密码
ansible-playbook -i hosts send-pubkey.yml --limit dbservers --ask-vault-pass
Vault password:
也可以在/etc/ansible/ansible.cfg文件中配置 default_vault_password_file的值指向一个文件,这个文件中保存了解密的密码
vault_password_file = /path/to/vault_password_file
这样执行playbook时就不用使用–ask-vault-pass参数了
ansible-playbook -i hosts send-pubkey.yml --limit dbservers