내 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