1. ホーム

[解決済み】ansibleのSSH認証チェックを無視する方法は?

2022-04-12 15:03:03

質問

Ansibleが行うSSHの認証チェックを無視する方法はありますか?例えば、新しいサーバーをセットアップしたばかりの時、この質問に「はい」と答えなければなりません。

GATHERING FACTS ***************************************************************
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:yy:zz:....
Are you sure you want to continue connecting (yes/no)?

これは一般的に悪い考えであることは分かっていますが、私はまずクラウドプロバイダーで新しい仮想サーバーを作成し、それを設定するために自動的にansible playbookを呼び出すスクリプトにこれを組み込んでいます。スクリプト実行の途中で人間が介入するのを避けたいのです。

どのように解決するのですか?

2つの選択肢があります。1つ目は、ご自身の回答にもあるように、環境変数を設定することです。 ANSIBLE_HOST_KEY_CHECKING を False に設定します。

2つ目の設定方法は、ansible.cfgファイルに記述することです。これは本当に便利なオプションで、グローバルに設定することもできますし(システムレベルまたはユーザーレベルで /etc/ansible/ansible.cfg または ~/.ansible.cfg )、または実行中のplaybookと同じディレクトリにある設定ファイルに記述します。

そのためには ansible.cfg ファイルを作成し、これをインクルードしてください。

[defaults]
host_key_checking = False

他にも、再生開始時にファクトを収集するかどうか、複数の場所で宣言されたハッシュをマージするか、別のものに置き換えるかなど、便利なデフォルトをたくさん設定することが可能です。オプションはたくさんあります。 ここで Ansibleのドキュメントにあります。


編集部:セキュリティに関するメモです。

SSHホスト鍵の検証は、セキュリティ層として意味のある 永続的なホスト - 同じマシンに何度も接続する場合、ホストキーをローカルに受け入れることは価値があります。

長寿命のEC2インスタンスでは、タスク実行でホストキーを受け入れるのが理にかなっています。 一度だけ インスタンスの初期作成時に

- name: Write the new ec2 instance host key to known hosts
  connection: local
  shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"

動的に立ち上げ、プレイブックを実行した直後に削除するインスタンスのホストキーをチェックすることにセキュリティ上の価値はありませんが、永続的なマシンのホストキーをチェックすることにはセキュリティ上の価値があります。そのため、論理環境ごとに異なるホスト鍵のチェックを管理する必要があります。

  • チェックはデフォルトで有効のまま ( ~/.ansible.cfg )
  • エフェメラルなインスタンスに対して実行するプレイブックは、作業ディレクトリでのホスト鍵チェックを無効にする ( ./ansible.cfg vagrant VM に対するユニットテスト用のプレイブックと並んで、短命の ec2 インスタンスに対する自動化)