Ssh

Ansible 在多個主機上部署多個授權密鑰

  • July 19, 2016

我們需要在伺服器上部署密鑰,但技巧是密鑰很多,並且並非所有密鑰都必須部署在所有伺服器上。現在我們這樣做:

在 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_users:
  - bob
  - root
  - alice

然後,您有一個單獨的變數文件,它定義了每個 SSH 使用者的名稱、密鑰和狀態。導入該變數文件,然後按原樣呼叫您的原始任務。

引用自:https://serverfault.com/questions/789199