Ansible synchronisieren Sie aufgefordert, die passphrase auch wenn bereits eingegeben am Anfang
Synchronize-Modul von Ansible (v1.6.5) eine Eingabeaufforderung für die passphrase (passphrase für den Schlüssel) obwohl ich schon eingegeben es am Anfang läuft das playbook.
Ahnung warum?
Ich mein playbook mit den folgenden Optionen:
-u myuser --ask-sudo-pass --private-key=/path/to/id_rsa
Hier ist mein synchronisieren Aufgabe:
- name: synchronize source files in src location
sudo: yes
synchronize: src={{local_src}} dest={{project_dirs.src}} archive=yes delete=yes rsync_opts=["--compress"]
when: synchronize_src_files
UPDATE mit ssh-agent
Anschluss an die Beratung von Lekensteyn, ich habe versucht mit ssh-agent.
Ich habe keine Eingabeaufforderung mehr, aber die Aufgabe nicht. Was bin ich?
eval `ssh-agent -s`
ssh-add ~/.ssh/id_rsa
Den Fehler:
TASK: [rolebooks/project | synchronize source files in src location] **********
failed: [10.0.0.101] => {"cmd": "rsync --delay-updates -FF --compress --delete-after --archive --rsh 'ssh -i /home/vagrant/.ssh/id_rsa -o StrictHostKeyChecking=no' --rsync-path=\"sudo rsync\" [--compress] --out-format='<<CHANGED>>%i %n%L' /projects/webapp [email protected]:/var/local/sites/project1/src", "failed": true, "rc": 12}
msg: sudo: no tty present and no askpass program specified
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.0]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
synchronize
Befehl (bis zu mindestens Ansible 1.6.6) scheint zu ignorieren, der normale SSH-control socket geöffnet von Ansible. Ihre Aufgabe könnte zu erweitern, um die folgenden:Diese Informationen zu erhalten, führen Sie Ihr playbook mit dem
-v
option. Als übergangslösung für diese Problem können Sie beginnenssh-agent
und fügen Sie den cache Ihres SSH-Schlüssel mitssh-add
. Finden Sie auf den Handbuch-Seiten für details.Zusätzliche Vorsichtsmaßnahmen mit der
synchronize
Modul:sudo: yes
, ansible wird mit--rsh 'sudo ssh'
die brechen, wenn die remote-sudo-Konfiguration erfordert ein Passwort und/oder TTY. Lösung:sudo: no
in Ihre Aufgabe definition.ansible_ssh_user
), nicht sudo. Ich habe keinen Weg gefunden, dies zu ändern, Benutzer (außer eine ungetestete Methode, überschreibt der Benutzer mit-o User
option über eine der anderen Optionen (dest_port="22 -o User=your_user"
?) in Kombination mitset_remote_user=yes
).Dies ist aus meinem Aufgaben-Datei:
sudo
was bedeutet, dass der SSH-Befehl erfolgreich war. Habe ich schon erwähnt, dass ich finde dassynchronize
das Schlimmste, unintegrated Teil ansible?Glaube ich standardmäßig synchronisieren Sie explizit die Einstellung ein Benutzername auf dem rsync-Befehl - können Sie dies verhindern und ermöglichen rsync zu arbeiten, von Ihrem ssh-config-Datei.
http://docs.ansible.com/synchronize_module.html
set_remote_user
setzen user@ für die remote-Pfade. Wenn Sie eine benutzerdefinierte ssh-config zu definieren, die remote-Benutzer für einen host, der nicht mit dem Inventar übereinstimmen Benutzer sind, sollten Sie diesen parameter auf "Nein".
Habe ich ein remote-Benutzer konfiguriert in meine ssh config und notwendig, um hinzuzufügen
set_remote_user=no
um synchronisieren zu arbeiten, da es sonst versucht, den falschen Benutzernamen und weder ssh-Schlüssel noch das Passwort funktionieren würde.Deaktivieren
tty_tickets
im/etc/sudoers
auf dem remote-Rechner wird dieses problem behoben (auf Kosten etwas reduzierte Sicherheit). E. g.,Habe ich versucht mit Hilfe der copy-Modul, aber es nimmt viel zu viel Zeit.
So machen Sie die synchronize-Modul funktioniert, werde ich Folgendes tun. Es ist nicht perfekt, aber zumindest funktioniert es.
ändert den Besitzer und die Berechtigungen des Ziel-remote-Ordner für den Benutzer verwende ich
verwenden, synchronisieren ohne sudo
wieder den Besitz und die Berechtigungen des Ziel-Fernbedienung, um das, was ich wollte, bevor
ignore_errors: True
und fügen Sie eine zusätzliche überprüfung nachregister: sync_result
, aber das ist auch nicht ideal. Vielleicht hat ja jemand meldete dies bereits am Ansible bug-tracker?Der beste Weg, dies zu nähern - ist für die Installation Ihrer Schlüssel zu ssh authorized_keys für den root-Benutzer auf remote-server.
ssh ec2-user@node; sudo su
). Es ist also nicht eine tatsächliche Sicherheit Risiko zu übernehmen, die Schlüssel zu root. Wenn irgendetwas, es macht das Leben einfacher.synchronize
abgeschlossen würde beschränken das Risiko auf einem engen Zeitfenster.