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_keys | authorized_keys ファイルを作成するディレクトリのパス名 |
state | ・present ・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') }}"