Ansible kann keine SSH-Verbindung zum dynamisch erstellten EC2-Host herstellen

Ansible kann keine SSH-Verbindung zum dynamisch erstellten EC2-Host herstellen

Mein Ansible-Skript erstellt eine AWS-Maschine und versucht dann, eine Verbindung zu ihr herzustellen. Abhängig von dem Image, das ich erstelle, ist der Standardbenutzername für die SSH-Anmeldung entweder „centos“ oder „ubuntu“ usw.

Mein Skript unten schlägt beim Warten auf die Verbindung mit dem Fehler „Zugriff verweigert“ fehl. IchannehmenDies liegt daran, dass SSH den falschen Benutzernamen verwendet. Der Kontrollknoten führt das Skript als „userx“ aus. (Ich habe bestätigt, dass sich mein öffentlicher Schlüssel auf dem Remotecomputer befindet und mein passender privater Schlüssel auf dem Kontrollknoten verfügbar ist.)

Wie passe ich mein Skript an, damit Ansible den richtigen Benutzernamen verwendet? Ich kann ihn nicht im Inventar angeben, da der Host gerade erst erstellt wurde und der Benutzername vom Instanztyp abhängt. Für wait_for_connection gibt es keine Option „Benutzername“.

Mein Skript:

- 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

Ich habe versucht, den Benutzer und die Schlüsseldatei direkt vor „wait_for_connection“ festzulegen, wie unten gezeigt, aber Ansible meldet immer noch, dass die Verbindung als Benutzer NONE hergestellt wird, und die versuchten Schlüsseldateien listen meine Schlüsseldatei (/root/.ssh/mykey) nicht auf:

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

und ein Teil der Ansible-Ausgabe:

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

Antwort1

Mit dem Schlüsselwort können Sie für jede Aufgabe, jeden Block oder jedes Spiel Variablen festlegen 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

verwandte Informationen