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