2016-10-30 2 views
0

Ich versuche, das Synchronisierungsmodul zu verwenden, um eine Datei von einem Antible-Knoten zu einem Remote-Knoten zu kopieren.Synchronisieren Modul schlägt fehl mit werden

Ich möchte diese Dateien als UserB auf den Remote-Knoten existieren, aber ich habe keinen direkten Zugriff auf UserB. Stattdessen hat UserA Sudo-Berechtigungen, um auf UserB zu wechseln. Also logge ich mich als UserA ein.

Meine Umgebung Datei sagt:

ansible_ssh_user=UserA 
ansible_ssh_pass=<PassUserA> 
ansible_become_method=sudo 
ansible_become_user=UserB 
ansible_become_pass=<PassUserA> 

Meine Aufgabe ist:

- name: Copy and unarchive webapps node. 
    synchronize: src=/home/ansible/templates/app/Sprint6/webapps dest=/opt/msdp/ca/app checksum=yes 
    become: yes 

Aber wenn ich das Textbuch laufe, bekomme ich einen Fehler:

fatal: [5.232.57.247]: FAILED! => {"changed": false, "cmd": "/usr/bin/rsync --delay-updates -F --compress --checksum --archive --rsh 'ssh -S none -o StrictHostKeyChecking=no -o ControlMaster=auto -o ControlPersist=60s' --rsync-path=\"sudo rsync\" --out-format='<<CHANGED>>%i %n%L' \"/home/ansible/templates/app/Sprint6/webapps\" \"[email protected]:/opt/msdp/ca/app\"", "failed": true, "msg": "sudo: sorry, you must have a tty to run sudo\nrsync: connection unexpectedly closed (0 bytes received so far) [sender]\nrsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]\n", "rc": 12} 

Auf dem entfernten Knoten , nur UserB kann schreiben unter: /opt/msdp/ca/app

Gibt es eine Config, die ich vermisse?

Antwort

2

synchronize Modul wird lokal auf der Steuermaschine ausgeführt (nicht auf dem Zielknoten), und standardmäßig verbindet es mit dem Knoten mit dem Konto (SSH Credentials) dort verwendete (gegenwärtig angemeldet in einem, oder in ~/.ssh/config definiert).

Zuerst müssen Sie, indem Sie die use_ssh_args Parameter das Standardverhalten außer Kraft zu setzen für die ansible_ssh_* Werte berücksichtigt werden, wenn Anschluss:

use_ssh_args Use the ssh_args specified in ansible.cfg


Zweitens, weil die Aufgabe lokal ausgeführt wird, become Direktive auch nur an der Kontrollmaschine wirksam. ansible_become_* Variablen gelten in dieser Situation nicht.

Stattdessen können Sie das Modul sagen sudo rsync zu erhöhen Sie die Berechtigungen für den Zielknoten durch den rsync_path Parameter auszuführen:

- name: Copy and unarchive webapps node. 
    synchronize: 
    src: /home/ansible/templates/app/Sprint6/webapps 
    dest: /opt/msdp/ca/app checksum=yes 
    use_ssh_args: yes 
    rsync_path: "sudo -u UserB rsync" 

schließlich die oben sudoers Einstellungen ermöglicht passwordless sudo annimmt. Wenn Sie wirklich ein Passwort im Klartext angeben müssen, benötigen Sie eine andere Problemumgehung in der Art von:

+0

Vielen Dank für Ihre ausführliche Antwort. Ich habe Punkt 2 und 3 vollständig verstanden, aber ich habe Verständnisprobleme 1. Was meinst du damit zu sagen, wenn ich ssh_args = unter /etc/ansible/ansible.cfg aktiviere, benutze ich alles, was ich in der Lab-Datei definiert habe? Aber ich kann diese Eigenschaften bereits beim Verbinden mit meinem Zielknoten verwenden. –

+0

Nein, diese Eigenschaften werden nicht für das Modul 'synchronize' verwendet und deshalb gibt es den zusätzlichen Parameter' use_ssh_args'. Ich weiß nicht, wie ich das anders ausdrücken soll. 'synchronize' Modul wird lokal ausgeführt und unterscheidet sich von anderen Modulen. Haben Sie die verknüpfte Dokumentseite überprüft? Es sagt im Grunde dasselbe aus. – techraf

+1

Danke techraf! Ich verstehe es jetzt. Und Entschuldigung für "Labor" -Datei. Ich meinte Umweltakte. –

1

prüfen Defaults requiretty im /etc/sudoers des Zielsystems und die Zeile mit Defaults !requiretty

ersetzen oder requiretty für den ansible Benutzer deaktivieren:

Defaults!/path/to/my/bin !requiretty 
Defaults:myansibleuser !requiretty 

prüfen diese site für weitere Optionen.

+0

Danke Henrik! Eine Frage. Auf dem Zielsystem habe ich keinen Anisible-Benutzer. Ich logge mich als UserA ein und wechsle dann zu UserB. In diesem Fall sollte ich requirtty für UserA deaktivieren, richtig? –

+0

Ich habe gerade 'Defaults! Requetty' und jetzt Im bekommen:' sudo: no tty vorhanden und kein askpass Programm angegeben.Muss ich irgendwelche sudo privelages auf dem Anible Knoten ändern? –

Verwandte Themen