authorized_key モジュール

2019/05/01

Ansible

 Ansible Documentation

authorized_key – Adds or removes an SSH authorized key

 機能

  • 対象ホストに鍵認証のための公開鍵を登録する
  • 対象ホストに登録した鍵認証のための公開鍵を削除する

 パラメータ

パラメータ選択肢/
Default
説明
comment-公開鍵のコメントを変更する
key
※必須※
-公開鍵の文字列またはファイル。ファイルの場合 lookup plugin を使用してファイルにアクセスする。URL の指定も可能
manage_dir・no
yes
authorized_key モジュールが公開鍵を登録するディレクトリを管理するかどうかを指定する
・no
管理しない。path: で標準のパスではないディレクトリに公開鍵を登録する場合 no を指定する
・yes
管理する。既定のディレクトリがなければ作成し、必要なオーナー/グループやパーミッションを設定する
path(homedir)+/.ssh/authorized_keysauthorized_keys ファイルを作成するディレクトリのパス名
statepresent
・absent
・present
公開鍵が存在する状態(登録)
・absent
公開鍵が存在しない状態(削除)
user
※必須※
-authorized_keys ファイルが更新される対象ホストのユーザー名
validate_certs・no
yes
key: に URL を指定した場合に適用される
・no
SSL 証明書を検証しない。自己署名証明書を使用する場合は no を指定する
・yes
SSL 証明書を検証する

 鍵の作成

登録する鍵を作成します。標準の鍵形式が CentOS6 は RSA でしたが CentOS7 は ECDSA になりました。それにあわせて、今回は ECDSA 形式の鍵を作成します。id_ecdsa が秘密鍵、id_ecdsa.pub が公開鍵です。 ssh-keygen コマンドのオプションの詳細はこちらのサイト(OpenSSH 日本語マニュアルページ - SSH-KEYGEN (1))を参照ください。
[ansibleman@ansiblesv ansible]$ ssh-keygen -t ecdsa -b 521
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/ansibleman/.ssh/id_ecdsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/ansibleman/.ssh/id_ecdsa.
Your public key has been saved in /home/ansibleman/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:4lY3+373pvVRJ1fGDWZSUDvSxoYrrRby4kB+kn/lfmA ansibleman@ansiblesv.exam.local
The key's randomart image is:
+---[ECDSA 521]---+
|            o+*  |
|             B +.|
|            o B =|
|           . = o.|
|      o S = o . +|
|     + + + *E  oo|
|      B o =+ . ..|
|     . * o... o.=|
|        o. o+o.++|
+----[SHA256]-----+
[ansibleman@ansiblesv ansible]$ ls -al ~/.ssh
total 12
drwx------. 2 ansibleman ansibleman  56 May  1 11:03 .
drwx------. 5 ansibleman ansibleman 126 Apr 28 15:03 ..
-rw-------. 1 ansibleman ansibleman  65 Apr 21 20:26 config
-rw-------. 1 ansibleman ansibleman 365 May  1 11:03 id_ecdsa
-rw-r--r--. 1 ansibleman ansibleman 285 May  1 11:03 id_ecdsa.pub
[ansibleman@ansiblesv ansible]$

 対象ホストに公開鍵を登録

対象ホストに作成した公開鍵を登録します。
■ hosts.yml (inventory ファイル)
all:
  hosts:
    node-c0706: 
■ host_vars/node-c0706.yml
ansible_host: 192.168.101.21
ansible_user: workman
ansible_password: workman@node_c0706
■ site.yml (playbook ファイル)
---
- hosts: all
  gather_facts: no

  tasks:
    - name: 公開鍵を登録する
      authorized_key:
        user: workman
        state: present
        key: "{{ lookup('file', '~/.ssh/id_ecdsa.pub') }}"
■ 実行結果
[ansibleman@ansiblesv ansible]$ ansible-playbook -i hosts.yml site.yml

PLAY [all] *********************************************************************

TASK [公開鍵を登録する] ****************************************************************
changed: [node-c0706]

PLAY RECAP *********************************************************************
node-c0706                 : ok=1    changed=1    unreachable=0    failed=0   

[ansibleman@ansiblesv ansible]$
■ 対象ホストの状態
・ 登録前
[workman@node-c0706 ~]$ ls -al
total 16
drwx------. 2 workman staff  83 Apr 25 21:10 .
drwxr-xr-x. 3 root    root   21 Apr 25 21:06 ..
-rw-------. 1 workman staff   7 Apr 25 21:10 .bash_history
-rw-r--r--. 1 workman staff  18 Oct 31 02:07 .bash_logout
-rw-r--r--. 1 workman staff 193 Oct 31 02:07 .bash_profile
-rw-r--r--. 1 workman staff 231 Oct 31 02:07 .bashrc
[workman@node-c0706 ~]$
・ 登録後
[workman@node-c0706 ~]$ ls -al
total 16
drwx------. 4 workman staff 111 May  1 11:45 .
drwxr-xr-x. 3 root    root   21 Apr 25 21:06 ..
drwx------. 3 workman staff  17 May  1 11:45 .ansible
-rw-------. 1 workman staff   7 Apr 25 21:10 .bash_history
-rw-r--r--. 1 workman staff  18 Oct 31 02:07 .bash_logout
-rw-r--r--. 1 workman staff 193 Oct 31 02:07 .bash_profile
-rw-r--r--. 1 workman staff 231 Oct 31 02:07 .bashrc
drwx------. 2 workman staff  29 May  1 11:45 .ssh
[workman@node-c0706 ~]$ ls -al ~/.ssh
total 4
drwx------. 2 workman staff  29 May  1 11:45 .
drwx------. 4 workman staff 111 May  1 11:45 ..
-rw-------. 1 workman staff 285 May  1 11:45 authorized_keys
[workman@node-c0706 ~]$

 対象ホストに鍵認証方式で接続

対象ホストに公開鍵を登録した後は管理サーバー側の設定を変更し、鍵認証で対象ホストに接続できるようにします。具体的には inventory ファイル(host_vars ディレクトリを使用している場合はディレクトリ内のファイル)で秘密鍵を参照するよう変更します。今回は host_vars ディレクトリ内の node-c0706.yml ファイルを次のように変更します。
ansible_host: 192.168.101.21
ansible_user: workman
ansible_ssh_private_key_file: ~/.ssh/id_ecdsa
パスワード認証はしないので ansible_password: を削除し、ansible_ssh_private_key_file: で秘密鍵のファイルを指定します。変更後、対象ホストに ping モジュールを実行し、正常に接続できるかテストします。
[ansibleman@ansiblesv ansible]$ ansible all -i hosts.yml -m ping
node-c0706 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[ansibleman@ansiblesv ansible]$ 

 例

    - name: 公開鍵を登録する
      authorized_key:
        user: workman
        state: present
        key: "{{ lookup('file', '~/.ssh/id_ecdsa.pub') }}"

    - name: 公開鍵を標準のディレクトリではない場所に登録する
      authorized_key:
        user: workman
        state: present
        key: "{{ lookup('file', '~/.ssh/id_ecdsa.pub') }}"
        path: /tmp/workman
        manage_dir: no
    - name: 公開鍵を削除する
      authorized_key:
        user: workman
        state: absent
        key: "{{ lookup('file', '~/.ssh/id_ecdsa.pub') }}"

カテゴリー

目次

QooQ