Ansible 無法 ssh 連線到動態建立的 EC2 主機

Ansible 無法 ssh 連線到動態建立的 EC2 主機

我的 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

相關內容