Ich versuche, ein Ansible-Playbook zu schreiben, um meine Server zu booten. Standardmäßig kann ich mich unter Linode nur als root mit einem Kennwort anmelden, daher meldet sich mein Playbook als root an, erstellt einen Nicht-root-Benutzer mit einem SSH-Schlüssel und deaktiviert root und Kennwort SSH.
Dies ist ein Problem, da ich das Playbook jetzt nicht mehr ausführen kann, da die Root-Anmeldung deaktiviert ist! Ich möchte, dass das Playbook idempotent ist und keine Hosts nach dem Bootstrapping hinzugefügt und entfernt werden muss.
Antworten:
Ich mache es gerne so:
Ich versuche, mit meinem ansiblen Benutzer eine Verbindung zum Remote-Host herzustellen. Wenn dies nicht möglich ist (beim ersten Durchlauf), verbinde ich mich als root und erstelle den ansiblen Benutzer zusammen mit seiner
authorized_keys
Datei und seinensudo
Rechten.Bei nachfolgenden Läufen funktioniert die Verbindung als ansprechbarer Benutzer, sodass der Aufgabenblock übersprungen werden kann.
Sobald der Remote-Host gebootet ist, kann ich mit dem ansiblen Benutzer fortfahren und
become
:quelle
remote_user
in Ihrem Playbook nach diesem ersten Lauf manuell ? Das ist nicht idempotent. Ich hoffe mir fehlt etwas.bootstrap.yml
undsite.yml
, wosite.yml
beinhaltetbootstrap.yml
vor allem anderen). Wenn die erste Aufgabe vonbootstrap.yml
fehlschlägt, werden alle anderen Aufgaben dieses Spiels übersprungen undsite.yml
übernehmen."skip_reason": "Conditional result was False"
. Wenn Sie das Spiel mit-vvv
ausführen, wird der SSH-Anruf zurückgegeben"msg": "non-zero return code", "rc": 255,
when
Bedingung behoben :when: not "OK" in check_ansible_user.stdout
Ich würde folgendes tun:
sshd_config
(ich würde eher empfehlen, die gesamte Datei mit a zu verwaltentemplate
, aber das liegt bei Ihnen) und Deaktivieren von Root-AnmeldungenFür die erste Rolle (die Basisrolle) verwende ich eher Folgendes:
Für die SSH-Konfiguration würde ich verwenden:
Die Rollenabhängigkeiten von Ansible werden dokumentiert hier .
Sie können dazu auch einfach die Bestellung in Ihrem Playbook verwenden.
Ich habe einige ansible Sachen auf Github (aus denen das Obige stammt), wenn Sie es im Kontext sehen wollen
quelle
Wenn Sie Ihren Server auf Linode mit dem erstellen linode Modul können Sie das Register
return value
derlinode
Aufgabe und schließen die die Bootstrap - Aufgaben mit einer Bedingung Überprüfung der outout der linode Aufgabe. Das sollte idempotent sein. Versuchen Sie so etwas:bootstrap.yml
würde dann alle Aufgaben enthalten, die zum Deaktivieren der SSH-Root-Anmeldung usw. erforderlich sind.quelle
Vielleicht könnten Sie das
ansible_ssh_user
im Inventar einfach ändern, nachdem Sie den Host gebootet haben?quelle