Ansible でホストキーチェックを無効にする方法

AnsibleBeginner
オンラインで実践に進む

はじめに

Ansible は、インフラストラクチャ管理とデプロイを簡素化する強力な IT 自動化ツールです。ただし、リモートホストを操作する際に、Ansible のデフォルトのホストキーチェックが時々問題を引き起こすことがあります。このチュートリアルでは、Ansible でホストキーチェックを無効にする手順を説明し、円滑で効率的な自動化体験を実現する方法を紹介します。

ホストキーチェックの理解

ホストキーチェックは、Ansible に備わっているセキュリティ機能で、接続先のリモートホストの身元を検証するのに役立ちます。初めてリモートホストに接続するとき、Ansible はそのホストの公開鍵を known_hosts ファイルに保存します。その後の接続では、Ansible はホストの公開鍵を known_hosts ファイルに保存されている鍵と比較し、リモートホストが以前に接続したのと同じホストであることを確認します。

このプロセスは、攻撃者が接続を傍受してリモートホストをなりすます中間者攻撃(man-in-the-middle attacks)を防ぐのに役立ちます。ホストの身元を検証することで、Ansible は正しいリモートホストと通信していることを保証できます。

ただし、いくつかのケースではホストキーチェックを無効にしたい場合があります。たとえば、一時的なホストや動的にプロビジョニングされるホストを操作するとき、または Ansible のプレイブックをテストするときなどです。ホストキーチェックを無効にすると、接続プロセスが高速化され、使い勝手が良くなりますが、中間者攻撃のリスクも高まります。

graph LR
  A[Client] -- Connect --> B[Remote Host]
  B -- Public Key --> A
  A -- Verify Public Key --> C[Known Hosts File]
アクション 説明
Connect クライアントがリモートホストに接続します。
Public Key リモートホストがその公開鍵をクライアントに送信します。
Verify Public Key クライアントは受信した公開鍵を known_hosts ファイルに保存されている鍵と比較します。

ホストキーチェックの無効化

Ansible でホストキーチェックを無効にするには、以下の方法を使用できます。

環境変数

ANSIBLE_HOST_KEY_CHECKING 環境変数を False に設定することで、ホストキーチェックをグローバルに無効にできます。

export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook my_playbook.yml

Ansible 設定ファイル

Ansible 設定ファイル(/etc/ansible/ansible.cfg または ~/.ansible.cfg)の host_key_checking オプションを設定することで、ホストキーチェックを無効にすることもできます。

[defaults]
host_key_checking = False

Ansible コマンドラインオプション

あるいは、--ask-vault-pass または -k オプションを使用して、特定の Ansible コマンドでホストキーチェックを無効にすることができます。

ansible-playbook my_playbook.yml --ask-vault-pass -k

これにより、ボールトパスワードの入力を求められ、現在のコマンドでホストキーチェックが無効になります。

graph LR
  A[Ansible] -- Set Environment Variable --> B[ANSIBLE_HOST_KEY_CHECKING=False]
  A -- Set Configuration File --> C[ansible.cfg]
  A -- Use Command-line Option --> D[--ask-vault-pass/-k]

ホストキーチェックを無効にすることで、接続プロセスを簡素化し、動的または一時的なホストの操作を容易にすることができます。ただし、これにより中間者攻撃のリスクも高まることに注意する必要があります。そのため、非本番環境でのみ、またはリモートホストが信頼できることを確信している場合にのみ、ホストキーチェックを無効にすることをおすすめします。

ホストキーチェックの設定

ホストキーチェックを有効にしたままにしたい場合は、自身のニーズに合わせて設定することができます。いくつかのオプションを紹介します。

ホストキーの手動承認

初めてリモートホストに接続するとき、Ansible はホストの公開鍵を承認するように促します。促されたときに「yes」と入力することで、手動で鍵を承認できます。

The authenticity of host 'example.com (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:abcd1234efgh5678.
Are you sure you want to continue connecting (yes/no)? yes

これにより、ホストの公開鍵が known_hosts ファイルに追加され、Ansible はその後の接続でホストの身元を検証するためにこの鍵を使用します。

ホストキーの自動承認

あるいは、Ansible 設定ファイルの host_key_auto_add オプションを設定することで、Ansible にホストキーを自動的に承認させることができます。

[defaults]
host_key_auto_add = True

これにより、新しいホストキーが自動的に known_hosts ファイルに追加され、確認のプロンプトが表示されません。

カスタムの known_hosts ファイルの指定

デフォルトでは、Ansible は ~/.ssh/known_hosts ファイルを使用してホストキーを保存します。ただし、ANSIBLE_SSH_ARGS 環境変数を設定することで、カスタムの known_hosts ファイルを指定することができます。

export ANSIBLE_SSH_ARGS="-o UserKnownHostsFile=/path/to/custom/known_hosts"
ansible-playbook my_playbook.yml

これは、異なる環境やプロジェクトに対して別々の known_hosts ファイルを管理したい場合に便利です。

graph LR
  A[Ansible] -- Prompt for Manual Acceptance --> B[known_hosts file]
  A -- Automatically Accept --> C[known_hosts file]
  A -- Specify Custom File --> D[/path/to/custom/known_hosts]

ホストキーチェックを設定することで、セキュリティと利便性のバランスを取り、Ansible の接続を安全に保ちながら、効率的なワークフローを可能にすることができます。

まとめ

Ansible でホストキーチェックを無効にすることで、自動化ワークフローを合理化し、障害を減らし、インフラストラクチャ管理の全体的な効率を向上させることができます。このチュートリアルでは、ホストキーチェックの理解、無効化する手順、利用可能な設定オプションを網羅した包括的な概要を提供しました。これらの知見を元に、このテクニックを自信を持って実装し、Ansible を活用した自動化機能を強化することができます。