Ansible: "sudo: ein Passwort ist erforderlich \ r \ n" [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Wie kann ein Benutzer mit SSH-Schlüsselauthentifizierung Sudo-Berechtigungen in Ansible haben? [Duplikat 1 Antwort

schnelle Frag

Ich habe einen Ubuntu-Server mit einem Benutzer namens test eingerichtet. Ich kopiere die authorized_keys darauf, ich kann kein Problem ssh. Wenn ich mache $ ansible -m ping ubu1, kein Problem, ich bekomme eine Antwort

    <i><p>ubu1 | SUCCESS => {
        <br>"changed": false, 
        <br>"ping": "pong"
    <br>}</i>

Was ich nicht bekomme ist das, wenn ich das tue

$ ansible-playbook -vvvv Playbooks / htopInstall.yml

fatal: [ubu1]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "setup"}, "module_stderr": "OpenSSH_7.2p2 Ubuntu-4ubuntu2.1, OpenSSL 1.0.2g-fips  1 Mar 2016\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 19: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 6109\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 1\r\nShared connection to 192.168.1.112 closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE", "parsed": false}

Wenn ich mache $ ansible-playbook --ask-sudo-pass Playbooks / htopInstall.yml, dann frage ich nach meinem Benutzerpasswort und das Spiel ist ein Erfolg.

Wenn ich die authorized_keys umbenenne, wird mir mitgeteilt, dass ich mich nicht über ssh mit dem Host verbinden konnte. das ist ok Was ich nicht verstehe, ist, warum es nach einem Sudo-Passwort fragt. Ich habe auf jeden Fall etwas verpasst.

my ansible.cfg Datei sieht so aus

[defaults]
nocows = 1
inventory = ./Playbooks/hosts
remote_user = test
private_key_file = /home/test/.ssh/id_ubu
host_key_checking = false

meine Hosts-Datei sieht so aus

[servers]
ubu1 ansible_ssh_host=192.168.1.112 ansible_ssh_user=test
 techraf29. Aug. 2016, 06:42
Sie haben die wichtigste Datei nicht mit einbezogenPlaybooks/htopInstall.yml. Nehmen Sie sich bitte ein paar Minuten Zeit, um zu erfahren, wie die Formatierung in SO funktioniert und welche Formatierung für verschiedene Elemente üblicherweise verwendet wird.
 Konstantin Suvorov29. Aug. 2016, 08:38
Haben Sie auf dem Zielhost für Ihr @ Sudo ohne Passwort aktiviertest Benutzer

Antworten auf die Frage(4)

Ich habe genau diesen Fehler gelöstsudo: a password is required\n was ich habe, wenn ich mein Playbook mit @ starbecome: true aber irgendwo in einer Aufgabe, die an localhost delegiert, etwa so:

uri:
  url: "{{ some_url }}"
  return_content: yes
  status_code: 200
delegate_to: 127.0.0.1

Wenn ich richtig verstanden habe, wird dasbecome: true veranlasst Ansible, sich beim Remote-Host als mein Benutzer anzumelden und dann @ zu verwendesudo, um alle Befehle auf dem Remote-Host als @ auszuführroot. Jetzt beim Delegieren an127.0.0.1, sudo wird auch ausgeführt und da es vorkommt, dass auf meinem localhost ein Passwort erwartet wird, wenn @ verwendet wisudo.

Für mich bestand die Lösung einfach darin, das @ zu entferndelegate_to, das in diesem speziellen Anwendungsfall eigentlich nicht benötigt wurde.

Was ich nicht verstehe, ist, warum es nach einem Sudo-Passwort fragt.

Wir können es nicht mit Sicherheit sagen, ohne Ihr Playbook zu sehen, aber es ist fast sicher, weil a) Ihr Playbook Ansible auffordert, einen bestimmten Befehl mit @ auszuführesudo (über dassudo oderbecome Direktiven) und b) dietest user hat kein passwortloses sudo aktiviert.

Es hört sich so an, als wüssten Sie (a), sind aber verwirrt über (b); Ich nehme insbesondere zur Kenntnis, dass Sie den Unterschied zwischen @ nicht verstehessh Authentifizierung undsudo Authentifizierung. Auch hier kann ich ohne weitere Informationen nicht bestätigen, ob dies der Fall ist, aber ich werde versuchen, es zu erklären, falls ich richtig geraten habe.

Wenn Sie über ssh eine Verbindung zu einem Computer herstellen, gibt es zwei Hauptmethoden, mit denen sshd Sie authentifiziert und Ihnen ermöglicht, sich als ein bestimmter Benutzer anzumelden. Die erste besteht darin, nach dem Kennwort des Kontos zu fragen, das dem System ausgehändigt wird, und eine Anmeldung zuzulassen, wenn dies korrekt war. Der zweite ist durch Public-Key-Kryptographie, in dem Sie nachweisen, dass Sie Zugriff auf einen privaten Schlüssel haben, der einem öffentlichen Fingerabdruck in @ entsprich~/.ssh/authorized_keys. Wenn Sie die Authentifizierungsprüfungen von sshd bestehen, erhalten Sie eine Shell auf dem Computer.

Wenn Sie einen Befehl mit @ aufrufsudo, du fragstsudo, um Ihre Privilegien über das hinaus zu erhöhen, was das Konto normalerweise erhält. Dies ist ein völlig anderes System mit Regeln, die in @ definiert sin/etc/sudoers (welches du mit @ bearbeiten solltesudo visudo) steuern, welche Benutzer sudo verwenden dürfen, welche Befehle sie ausführen dürfen, ob sie ihr Kennwort erneut eingeben müssen oder nicht, wenn sie den Befehl verwenden, und eine Vielzahl anderer Konfigurationsoptionen.

Wenn Sie das Playbook normal ausführen, wird Ansible mit einer Sudo-Eingabeaufforderung angezeigt und weiß nicht, wie Sie fortfahren sollen. Es kennt das Kontokennwort nicht. Deshalb--ask-sudo-pass existiert: Sie geben das Kennwort an Ansible weiter, damit es bei Aufforderung an sudo weitergeleitet werden kann. Wenn Sie dies nicht jedes Mal eingeben müssen und sich dafür entschieden haben, dass es innerhalb Ihrer Sicherheitsparameter liegt, zuzulassen, dass sich jeder als @ anmeldetest Benutzer, um eine Aktion als root auszuführen, dann können Sieman sudoers zum Festlegen von Sudo ohne Passwort für dieses Konto.

Ihre Antwort auf die Frage