Ansible Playbook kann den für die SSH-Verbindung verwendeten Schlüssel --key-file
in der Befehlszeile angeben .
ansible-playbook -i hosts playbook.yml --key-file "~/.ssh/mykey.pem"
Ist es möglich, den Speicherort dieses Schlüssels in der Playbook-Datei anzugeben, anstatt ihn in der --key-file
Befehlszeile zu verwenden?
Weil ich den Speicherort dieses Schlüssels in eine var.yaml
Datei schreiben möchte, die von ansible playbook mit gelesen wird vars_files:
.
Folgendes ist Teil meiner Konfiguration:
vars.yml Datei
key1: ~/.ssh/mykey1.pem
key2: ~/.ssh/mykey2.pem
playbook.yml Datei
---
- hosts: myHost
remote_user: ubuntu
key_file: {{ key1 }} # This is not a valid syntax in ansible. Does there exist this kind of directive which allows me to specify the ssh key used for this connection?
vars_files:
- vars.yml
tasks:
- name: Echo a hello message
command: echo hello
Ich habe versucht, ansible_ssh_private_key_file
unter hinzuzufügen vars
. Aber auf meiner Maschine funktioniert es nicht.
vars_files:
- vars.yml
vars:
ansible_ssh_private_key_file: "{{ key1 }}"
tasks:
- name: Echo a hello message
command: echo hello
Wenn ich ansible-playbook
mit dem playbook.yml
oben genannten renne. Ich habe folgenden Fehler erhalten:
TASK [Gathering Facts] ******************************************************************************************************************************
Using module file /usr/local/lib/python2.7/site-packages/ansible/modules/system/setup.py
<192.168.5.100> ESTABLISH SSH CONNECTION FOR USER: ubuntu
<192.168.5.100> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 -o ControlPath=/Users/myName/.ansible/cp/2d18691789 192.168.5.100 '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
<192.168.5.100> (255, '', 'Permission denied (publickey).\r\n')
fatal: [192.168.5.100]: UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey).\r\n",
"unreachable": true
}
to retry, use: --limit @/Users/myName/playbook.retry
Ich finde den Namen meiner Schlüsseldatei nicht im Befehl ssh. Es ist komisch.
--private-key=~/.ssh/keys/id_rsa
wird funktionieren.--private-key key_file_path
hat auch bei mir funktioniert.Antworten:
Der gesuchte Variablenname lautet
ansible_ssh_private_key_file
.Sie sollten es auf 'vars'-Ebene einstellen:
in der Inventardatei:
in der
host_vars
:in einer
group_vars
Datei, wenn Sie denselben Schlüssel für eine Gruppe von Hosts verwendenim
vars
Abschnitt Ihres Spiels:Inventardokumentation
quelle
ansible_ssh_private_key_file
untervars
funktioniert auf meinem Computer nicht. Es ist komisch.vars.yml
aus der Inventardatei laden kann.vars
es einfach zu spät, denke ich. Sie sollten dannhost_vars
odergroup_vars
Dateien verwenden, wenn Sie dies nicht in Ihr Inventar aufnehmen möchten.vars:
Abschnitt definierten privaten Schlüssel .Sie können die Datei ansible.cfg verwenden. Sie sollte folgendermaßen aussehen (es gibt andere Parameter, die Sie möglicherweise einschließen möchten):
Ich hoffe, das erspart Ihnen das Tippen
quelle
Wenn Sie Ihr Playbook mit
ansible-playbook -vvv
ausführen, wird der tatsächliche Befehl ausgeführt, sodass Sie überprüfen können, ob der Schlüssel tatsächlich im Befehl ssh enthalten ist (und möglicherweise feststellen, dass das Problem der falsche Benutzername und nicht der fehlende Schlüssel war).Ich stimme Brians Kommentar oben (und Zigams Bearbeitung) zu, dass der Vars-Abschnitt zu spät ist. Ich habe auch getestet, den Schlüssel in die On-the-Fly-Definition des Hosts aufzunehmen
aber das scheitert auch.
Das ist also keine Antwort. Nur ein paar Debugging-Hilfe und Dinge, die man nicht ausprobieren sollte.
quelle