AnsibleによるSSHの信頼性チェックを無視する方法はありますか?例えば、私がちょうど新しいサーバーをセットアップしたとき、私はこの質問にyesと答えなければなりません:
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つの選択肢 - 最初の選択肢として、自分の答えで述べたように、環境変数ANSIBLE_Host_KEY_CHECKING
をFalseに設定します。
それを設定する2番目の方法はansible.cfgファイルにそれを置くことです、そしてそれはあなたがそれをグローバルに設定することができるので(システムまたはユーザレベルで、または/etc/ansible/ansible.cfg
または~/.ansible.cfg
)、または実行中のプレイブックと同じディレクトリ。
これを行うには、これらの場所のいずれかにansible.cfg
ファイルを作成し、これを含めます。
[defaults]
Host_key_checking = False
また、プレイの開始時に事実を収集するかどうか、複数の場所で宣言されたハッシュをマージするかどうか、または別のものと置き換えるかなど、他にも多数の便利なデフォルトを設定できます。 Ansibleのドキュメントには、たくさんの選択肢があります ここ 。
編集:セキュリティ上の注意。
SSHホスト鍵の検証はpersistent hostsにとって意味のあるセキュリティ層です - 同じマシンに何度も接続している場合は、ホスト鍵をローカルに受け入れることが重要です。
寿命の長いEC2インスタンスの場合、インスタンスの初期作成時にタスク実行一度だけを指定してHostキーを受け入れることは意味があります。
- 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
、短命のec2インスタンスに対する自動化)答えが見つかりました。環境変数ANSIBLE_Host_KEY_CHECKING
をFalse
に設定する必要があります。例えば:
ANSIBLE_Host_KEY_CHECKING=False ansible-playbook ...
に転送します nikobelia
プレイブックを実行するためにjenkinsを使用している人のために、ansible-playbookを実行する前に私のjenkinsジョブに追加したのは、環境変数ANSIBLE_Host_KEY_CHECKING = Falseです。
export ANSIBLE_Host_KEY_CHECKING=False
ansible-playbook 'playbook.yml' \
--extra-vars="some vars..." \
--tags="tags_name..." -vv
プレイブックの実行中にコマンドライン引数として渡すことができます。
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
Sshの検証を無視するには、validate_certsという名前のパラメータを使用します。
- ec2_AMI:
instance_id: i-0661fa8b45a7531a7
wait: yes
name: ansible
validate_certs: false
tags:
Name: ansible
Service: TestService
こうすることでsshの検証プロセスを無視します
すべてのホストでHost_key_checking
をfalse
に変更することは非常に悪い考えです。
あなたがそれを無視したい唯一の時間は、これらの2つのタスクが達成するであろう「最初の接触」にあります:
- name: Check known_hosts for {{ inventory_hostname }}
local_action: Shell ssh-keygen -F {{ inventory_hostname }}
register: has_entry_in_known_hosts_file
changed_when: false
ignore_errors: yes
- name: Ignore Host key on first run
when: has_entry_in_known_hosts_file == 1
set_fact:
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
そのため、known_hosts
ファイルにHostキーがない場合は、Hostキーチェックをオフにするだけです。
私は質問が回答されており、それも正しいことを知っていますが、それぞれのチェックをいつ、なぜ追加する必要があるかを明確に説明したansibleドキュメントをリンクしたかっただけです: Host-key-checking
ansible.cfg
またはplaybook.yml
を変更したくない場合は、環境変数を設定するだけです。
export ANSIBLE_Host_KEY_CHECKING=False