我们需要在服务器上部署密钥,但技巧是密钥很多,并且并非所有密钥都必须部署在所有服务器上。现在我们这样做:
在 vars角色/authorized_keys/vars/main.yml
ssh_users:
- name: bob
key: "{{ lookup('file', 'roles/authorized_keys/vars/bob.pub') }}"
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/guru.pub') }}"
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/user.pub') }}"
state: absent
在任务中:角色/authorized_keys/tasks/main.yml
- name: Add ssh key.
authorized_key: user={{ item.name }} key="{{ item.key }}" state={{ item.state }}
with_items: ssh_users
在剧本中:authorized_keys.yml
---
- hosts: '{{ hosts }}'
vars_files:
- '{{ vars }}'
roles:
- { role: authorized_keys }
在开始剧本之前更改角色/authorized_keys/vars/main.yml(存在或不存在)。启动 playbook 时添加主机和主机组:
ansible-playbook -i production --extra-vars "hosts=web:pg:1.2.3.4" authorized_keys.yml
以前,一切都很好,但现在增加了密钥和服务器的数量。现在我不记得谁的密钥在哪个服务器上。
请告诉我如何为每个密钥设置主机列表?例如这样的:
- name: bob
key: "{{ lookup('file', 'roles/authorized_keys/vars/bob.pub') }}"
servers: web,database,12.12.12.12
state: present
- name: root
key: "{{ lookup('file', 'roles/authorized_keys/vars/guru.pub') }}"
servers: api,pg,30.30.30.30
state: present
我会使用一个主机变量“ssh_users”,它说明需要添加主机密钥的用户。
然后,您有一个单独的变量文件,它定义了每个 SSH 用户的名称、密钥和状态。导入该变量文件,然后按原样调用您的原始任务。