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

관련 정보