Ansible が動的に作成された EC2 ホストへの SSH 接続に失敗する

Ansible が動的に作成された EC2 ホストへの SSH 接続に失敗する

私の Ansible スクリプトは AWS マシンを作成し、それに接続しようとします。作成するイメージに応じて、SSH ログインのデフォルトのユーザー名は「centos」または「ubuntu」などになります。

以下のスクリプトはwait_for_connectionで「権限が拒否されました」というエラーで失敗します。仮定するこれは、ssh が間違ったユーザー名を使用しているためです。コントロール ノードは 'userx' としてスクリプトを実行しています。(公開キーがリモート マシン上にあり、一致する秘密キーがコントロール ノードで使用できることを確認しました)。

Ansible が正しいユーザー名を使用するようにスクリプトを調整するにはどうすればよいですか? ホストが作成されたばかりで、ユーザー名はインスタンスの種類によって異なるため、インベントリで指定できません。wait_for_connection には「ユーザー名」オプションがありません。

私のスクリプト:

- name: Create one AWS machine
  local_action:
    module: ec2
    aws_access_key: "{{ aws_access_key }}"
    aws_secret_key: "{{ aws_secret_key }}"
    key_name: "{{ key_name }}"
    group_id: "{{ security_group_id }}"
    instance_type: "{{ instance_type }}"
    image: "{{ ami_id }}"
    wait: true
    region: "{{ aws_region }}"
    zone: "{{ aws_zone}}"
    vpc_subnet_id: "{{ aws_vpc_subnet }}"
    assign_public_ip: yes
  register: ec2

- name: Wait for SSH to come up
  delegate_to: "{{ ec2.instances[0].public_dns_name }}"
  wait_for_connection:
    delay: 60
    sleep: 15
    timeout: 40

以下に示すように、wait_for_connection の直前にユーザーとキーファイルを設定しようとしましたが、Ansible は依然としてユーザー NONE として接続していると報告し、試行されたキーファイルはキーファイル (/root/.ssh/mykey) をリストしません。

- name: Prepare to connect to new node
  set_fact:
    ansible_user: 'centos'
    ansible_ssh_private_key_file: "{{ private_key_file }}"        

Ansible 出力の一部:

<ec2-34-27-194-74.compute-1.amazonaws.com> ESTABLISH SSH CONNECTION FOR USER: None
debug1: identity file /root/.ssh/id_ecdsa type -1

答え1

キーワードを使用して、任意のタスク、ブロック、またはプレイに変数を設定できますvars

- name: Wait for SSH to come up
  delegate_to: "{{ ec2.instances[0].public_dns_name }}"
  wait_for_connection:
    delay: 60
    sleep: 15
    timeout: 40
  vars:
    ansible_user: centos

関連情報