In Ansible, ist es möglich zu definieren die Authentifizierungsmethode pro playbook?
TL;DR: Ist es möglich, die Kette zwei playbooks mit einem ansible-playbook-Befehl, wo ein playbook Kennwort auth und die anderen playbook-key-auth? (siehe den letzten Abschnitt für real-world-Zweck).
Setup:
Habe ich zwei playbooks, von denen die zweite include
s die ersten.
PlaybookA.yml
---
- name: PlaybookA # requires password authentication
hosts: sub.domain.ext
remote_user: root
roles:
- { role: role1, sudo: yes }
...
PlaybookB.yml
---
- name: Run PlaybookA
include: PlaybookA.yml
- name: PlaybookB # requires ssh-key authentication
hosts: sub.domain.ext
remote_user: ansible
roles:
- { role: role2, sudo: yes }
...
Anforderungen:
- Führen nur einen Befehl aus.
- Verwenden die Passwort-auth für PlaybookA.
- Verwenden Sie ssh-key-auth für PlaybookB.
Frage 1:
Ist es möglich, innerhalb von Ansible (Version 1.9.4 oder niedriger) zum ausführen einer ansible-playbook-Befehl erfolgreich ausgeführt PlaybookB mit ssh-key-Authentifizierung aber wenn PlaybookB umfasst PlaybookA, laufen PlaybookA Authentifizierung mittels Passwort?
Frage 2:
Wenn dies nicht möglich ist, mit Ansible 1.9.4 oder niedriger ist, ist dies möglich mit 2.0.0+?
Notizen von Wert:
- Ansible bietet
--ask-pass
(oder-k
) als Befehlszeilen-switch aktivieren Passwort-Authentifizierung. - Ansible bietet
ask_pass
als eine variable, aber es scheint, als ob es kann nur festgelegt werden, innerhalbansible.cfg
(ich habe nicht in der Lage, dies als ein playbook variable, um den gewünschten Effekt). - Versuchen
ask_pass
als eine Anweisung innerhalb eines playbook im folgenden:ERROR: ask_pass is not a legal parameter of an Ansible Play
. Wenn dieser parameter erlaubt war, es würde einen Weg zu weisen ansible auf einer pro-playbook-Ebene, welche Authentifizierungs-Methode zu verwenden.
Zweck /Real World:
Ich bin versucht, erstellen Sie eine configuration-management-workflow mit Ansible, dass wird einfach genug sein, die anderen bei der Arbeit werden in der Lage sein zu lernen /anpassen (und hoffentlich auch der Einsatz von Ansible im Allgemeinen für CM und Orchestrierung).
Für jede neue Maschine (VM oder physisch), dass gebaut wird, ich beabsichtige, für uns zu laufen, zwei playbooks sofort. PlaybookA (wie oben gezeigt) hat die Verantwortung, sich mit den richtigen Standard-Benutzer (normalerweise, hängt von der Infrastruktur [aws, vsphere, keine, etc]). Einmal in seiner sehr begrenzten job:
- Der Schaffung der standardisierten user für ansible auf ausführen und installieren Sie die ssh-Schlüssel).
- Entfernen Sie alle nicht-root-Benutzer, die möglicherweise vorhanden sind (Artefakte der vm-Infrastruktur, etc).
- Deaktivieren Sie den root-Zugriff.
- Deaktivieren Sie Kennwort-Authentifizierung (ssh-Schlüssel nur von diesem Punkt auf).
Je nach vm-Infrastruktur (oder deren fehlen), die Standard-Benutzer-oder Standard-Authentifizierung-Methode können anders sein. Zum Ziel der Verabschiedung von Ansible, ich bin versucht, die Dinge sehr einfach für die Kolleginnen und Kollegen, so möchte ich automatisieren, wie viel von diesen flow-Kontrolle wie möglich.
Einmal PlaybookA hat gesperrt die vm und setup das standardisierte Benutzer, PlaybookB verwendet das standardisierte Benutzer, um alle anderen Operationen, die nötig sind, um unsere vm ' s bis zu den notwendigen Basisdaten der tools und utilities, etc.
Irgendwelche Tipps, Hinweise, Anregungen würde sehr geschätzt werden.
- Warum müssen Sie sich mit einem Passwort überhaupt? Nur prebake Ihre VM-image mit einem SSH-Schlüssel an einen Benutzer (oder associate AWS-Instanz mit einem Schlüssel (- paar), dass Ansible verwenden können, die auf den ersten Lauf. Der erste Schlüssel muss nicht alles sein, auch sichern.
- Das wäre eine ideale Lösung, eine, die ich tun, verwenden Sie für die VMs, die ich schaffen. Die Lösung, die ich bin zu arbeiten auf, ist jedoch nicht so sehr für mich oder die VMs, die ich erstellen, da es für co-Arbeitnehmer, die sowohl VMs erstellen und sind nicht vertraut mit publickey-Authentifizierung. Die Frage, die ich hier veröffentlicht wird, einen Schritt, in einer Anstrengung, um den übergang Sie publickey-Authentifizierung verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe vor dem gleichen problem heute. Zwei Ideen, die helfen können Sie hier:
Beantragen können Sie das Passwort über vars_prompt in Ihrem playbook-statt-Fragen-pass
Setzen Sie das Kennwort mit set_fact:
Könnte man die Speicherung des Passwortes in einer Datei, oder eine Aufforderung, wie im Beispiel unten. In meinem Beispiel, die sshd-config, das erstellt wird, verbiete Passwort-logins, aber mit ansible Standardeinstellungen, Sie werden überrascht sein, dass die zweite playbook wird immer noch ausgeführt werden (!), obwohl ich "vergessen" zu erstellen, die einen authorized_key. Das ist aufgrund der Tatsache, dass ansible nutzt die ControlPersist Optionen von ssh und einfach hält die Verbindung zwischen den einzelnen Aufgaben öffnen. Sie können diese Funktion deaktivieren, in ansible.cfg
Beispiel Playbook:
ansible_become_pass
auch wenn mitsudo
.Weiß ich nicht, eine Möglichkeit zum ändern der Authentifizierungsmethode, die innerhalb der spielen. Ich denke, ich würde lieber laufen zwei verschiedene playbooks als Jenkins-job oder ähnliches, aber ich kann mir einen reinen Ansible workaround: statt die zweite playbook, die Sie bekommen konnte, ansible, die zum ausführen eines shell-Kommando als lokale Aktion, und führen Sie den Befehl zum ausführen der zweiten playbook von der ersten. Hier ist eine grobe proof-of-concept:
Hier ist die Ausgabe: