web-dev-qa-db-ja.com

確かなSSH認証性チェックを無視するにはどうすればいいですか?

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を自動的に呼び出すスクリプトにこれを組み入れます。スクリプトの実行中に人間の介入を避けたい。

125
Johan

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内)
  • 一時的なインスタンスに対して実行したプレイブックの作業ディレクトリでのホストキーチェックを無効にします(vagrant VMに対するユニットテスト用のプレイブックの横にある./ansible.cfg、短命のec2インスタンスに対する自動化)
191
nikobelia

答えが見つかりました。環境変数ANSIBLE_Host_KEY_CHECKINGFalseに設定する必要があります。例えば:

ANSIBLE_Host_KEY_CHECKING=False ansible-playbook ...
23
Johan

に転送します 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
4
dsaydon

プレイブックの実行中にコマンドライン引数として渡すことができます。

ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'

1
paresh patil

Sshの検証を無視するには、validate_certsという名前のパラメータを使用します。

- ec2_AMI:
    instance_id: i-0661fa8b45a7531a7
    wait: yes
    name: ansible
    validate_certs: false
    tags:
      Name: ansible
      Service: TestService

こうすることでsshの検証プロセスを無視します

0
Nitesh Jain

すべてのホストでHost_key_checkingfalseに変更することは非常に悪い考えです。

あなたがそれを無視したい唯一の時間は、これらの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キーチェックをオフにするだけです。

0
davidolrik

私は質問が回答されており、それも正しいことを知っていますが、それぞれのチェックをいつ、なぜ追加する必要があるかを明確に説明したansibleドキュメントをリンクしたかっただけです: Host-key-checking

0
justjais

ansible.cfgまたはplaybook.ymlを変更したくない場合は、環境変数を設定するだけです。

export ANSIBLE_Host_KEY_CHECKING=False
0
Rene B.