LoginSignup
6
0

More than 3 years have passed since last update.

SSH接続時、初回確認メッセージを出さないようにするAnsibleロール

Last updated at Posted at 2019-12-11

このエントリは Ansible 3 Advent Calendar 2019の11日目の投稿です。
ちょうど空いていたので、書いてみました。

この記事の内容

  • SSH初回接続時の確認メッセージを、出さないようにAnsibleで設定する

前提

  • 特定のホストへのSSH接続時のみ、確認メッセージを出さないようにしたい
  • ホストA、ホストBがあると仮定し、A -> BへSSH接続する
  • Ansibleを実行するクライアントは、A、BどちらへもSSH接続できる前提
  • StrictHostKeyCheckingの設定はいじらない

実装方法

  • Aのknown_hostsにBの公開鍵情報を直接記載する
  • Ansibleのknown_hostsモジュールを使う

コード

main.yml

# vars:
#     - ssh_host_and_user:
#         - from:
#             user: vagrant
#             host: A
#           to:
#             user: root
#             host: B

# ホストBのrootユーザの公開鍵を、変数に格納する
- name: Copy public key to variable
  slurp:
    src: "{{ ROOT_PUBLIC_KEY_HOST_B }}"
  with_items: "{{ ssh_host_and_user }}"
  register: to_host_public_key
  when: item.to.host == inventory_hostname

# ホストAの,任意ユーザのホームディレクトリを取得する
- name: Get home direcotry of from.user
  shell: |
    set -o pipefail
    egrep "^{{ item.from.user }}:" /etc/passwd | awk -F: '{ print $6 }'
  register: from_user_home_directory
  with_items: "{{ ssh_host_and_user }}"
  changed_when: false
  failed_when: from_user_home_directory.rc != 0
  when: item.from.host == inventory_hostname

# ホストBのrootユーザの公開鍵を、ホストAのknown_hostsへ書き込む
- name: Add Host B infomation to known_hosts in Host A
  become: item.from.user
  known_hosts:
    key: "{{ item.to.host }}
          {{ hostvars[item.to.host].to_host_public_key.results[0].content | b64decode }}"
    name: "{{ item.to.host }}"
    path: "{{ hostvars[item.from.host].from_user_home_directory.results[my_idx].stdout }}/.ssh/known_hosts"
    state: present
  with_items: "{{ ssh_host_and_user }}"
  loop_control:
    index_var: my_idx
  when: item.from.host == inventory_hostname


終わりに

known_hostsモジュールを使って、SSH初回確認メッセージを出さないように処理を書いてみました。
- 特定のホストへSSH接続するときのみ、確認メッセージを出さないようにできた
- 場合によっては、StrictHostKeyCheckingの設定をいじったほうが便利かもしれない

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0