Ansibleを使用して、新しいユーザーの公開鍵をホストインベントリにプッシュしたいと思います。これを行うには、以下の例のようにプレイブックが作成されます。
---
- name: vms1 - Authorize hosts with pub key
hosts: vms1
tasks:
- name: Copy ssh pub key to remote host
ansible.posix.authorized_key:
user: user1
state: present
key: "{{ lookup('file', '/home/controluser/.ssh/id_rsa.pub') }}"
- name: vms2 - Authorize hosts with pub key
hosts: vms2
tasks:
- name: Copy ssh pub key to remote host
ansible.posix.authorized_key:
user: user2
state: present
key: "{{ lookup('file', '/home/controluser/.ssh/id_rsa.pub') }}"
- name: vms3 - Authorize hosts with pub key
hosts: vms3
tasks:
- name: Copy ssh pub key to remote host
ansible.posix.authorized_key:
user: user3
state: present
key: "{{ lookup('file', '/home/controluser/.ssh/id_rsa.pub') }}"
在庫は次のとおりです。 (より多くのホストが利用可能)
[vms1]
192.168.7.211
192.168.7.212
192.168.7.213
[vms2]
192.168.7.21
192.168.7.22
192.168.7.23
[vms3]
192.168.7.111
192.168.7.112
192.168.7.113
各プレイには独自のホストグループとユーザーがいます。プレイブックは、次のコマンドを使用して起動できます。
ansible-playbook -k -i inventory playbook.yml
オプションを使用すると、-k
SSHパスワードは一度だけ尋ねられます。問題は、グループごとにパスワードが異なることです。だからプレイするたびにパスワードを入力したいです。
プレイするたびになぜパスワードが必要なのですか?
答え1
尋ねる:「なぜプレイするたびにパスワードを入力するのですか?」
答え:変数を使用してくださいansible_password。たとえば、プレイブックに変数を入れると変わりやすい
- hosts: vms1
vars:
ansible_password: connection passwd for vms1
tasks:
- name: Copy ssh pub key to remote host
...
- hosts: vms2
vars:
ansible_password: connection passwd for vms2
tasks:
- name: Copy ssh pub key to remote host
...
特定の情報を見る
shell> ansible-doc -t connection ssh
初めてプレイするときは、コードを読んで後で使用してください。たとえば、所与の在庫
shell> cat hosts
[vms1]
192.168.7.211
192.168.7.212
192.168.7.213
[vms2]
192.168.7.21
192.168.7.22
192.168.7.23
[vms3]
192.168.7.111
192.168.7.112
192.168.7.113
以下のスクリプト
shell> cat pb.yml
- hosts: all
gather_facts: false
tasks:
- block:
- pause:
prompt: "Password for {{ item }}"
register: out
loop: "{{ groups|difference(['all', 'ungrouped']) }}"
- set_fact:
passwords: "{{ dict(out.results|json_query('[].[item, user_input]')) }}"
- debug:
var: passwords
run_once: true
- hosts: vms1
gather_facts: false
vars:
ansible_password: "{{ passwords.vms1 }}"
tasks:
- debug:
msg: "Copy ssh pub key to remote host by '{{ ansible_password }}'"
run_once: true
- hosts: vms2
gather_facts: false
vars:
ansible_password: "{{ passwords.vms2 }}"
tasks:
- debug:
msg: "Copy ssh pub key to remote host by '{{ ansible_password }}'"
run_once: true
- hosts: vms3
gather_facts: false
vars:
ansible_password: "{{ passwords.vms3 }}"
tasks:
- debug:
msg: "Copy ssh pub key to remote host by '{{ ansible_password }}'"
run_once: true
初めてプレイするときは、ユーザーにパスワードの入力を求め、後で使用します。
shell> ansible-playbook -i hosts pb.yml
PLAY [all] ***********************************************************************************
TASK [pause] *********************************************************************************
[pause]
Password for vms1:
passwd for vms1^Mok: [192.168.7.211] => (item=vms1)
[pause]
Password for vms2:
passwd for vms2^Mok: [192.168.7.211] => (item=vms2)
[pause]
Password for vms3:
passwd for vms3^Mok: [192.168.7.211] => (item=vms3)
TASK [set_fact] ******************************************************************************
ok: [192.168.7.211]
TASK [debug] *********************************************************************************
ok: [192.168.7.211] =>
passwords:
vms1: passwd for vms1
vms2: passwd for vms2
vms3: passwd for vms3
PLAY [vms1] **********************************************************************************
TASK [debug] *********************************************************************************
ok: [192.168.7.211] =>
msg: Copy ssh pub key to remote host by 'passwd for vms1'
PLAY [vms2] **********************************************************************************
TASK [debug] *********************************************************************************
ok: [192.168.7.21] =>
msg: Copy ssh pub key to remote host by 'passwd for vms2'
PLAY [vms3] **********************************************************************************
TASK [debug] *********************************************************************************
ok: [192.168.7.111] =>
msg: Copy ssh pub key to remote host by 'passwd for vms3'
PLAY RECAP ***********************************************************************************
192.168.7.111: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.7.21: ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.7.211: ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0