Ich habe einen Ubuntu 14.04 Server übernommen. Es hat einen Benutzer namens "Deployer" (wird mit Capistrano verwendet) und benötigt daher Sudo-Berechtigungen. Mit diesem Setup kann ich mich beim Server anmelden und Dinge tun wie:
workstation> ssh deployer@myserver
myserver> sudo apt-get install git
myserver> exit
workstation>
Ich versuche herauszufinden, wie man mit Ansible (Version 2.0.2.0 und Python 2.7.3) einen Benutzer namens "Deployer" erstellt und sich mit dieser ID beim Server anmeldet und dann so sudo-ish Dinge wie "apt" -get install ". Mein Spielbuch sieht so aus:
---
- hosts: example
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- group: name=sudo state=present
- name: Add deployer user and add it to sudo
user: name=deployer
state=present
createhome=yes
become: yes
become_method: "sudo"
- name: Set up authorized keys for the deployer user
authorized_key: user=deployer key="{{item}}"
with_file:
- /home/jaygodse/.ssh/id_rsa.pub
Nachdem ich dieses Playbook ausgeführt habe, kann ich als "Deployer" (z. B. ssh deployer @ myserver) auf den Computer ssh. Wenn ich jedoch einen sudo-Befehl ausführe, werde ich immer nach meinem sudo-Passwort gefragt.
Ich verstehe, dass der "Deployer" -Benutzer letztendlich seinen Weg in die visudo-Benutzerdatei finden muss, aber ich kann nicht herausfinden, welche magischen Ansible-Beschwörungsformeln aufgerufen werden müssen, damit ich als Deployer in den Computer ssh und dann einen sudo-Befehl (z. B. sudo) ausführen kann apt-get install git ") ohne Aufforderung zur Eingabe eines sudo-Passworts.
Ich habe hoch und niedrig gesucht und kann anscheinend kein Ansible-Playbook-Fragment finden, das den Benutzer "Deployer" in die Sudo-Gruppe einordnet, ohne ein Kennwort zu benötigen. Wie wird das gemacht?
quelle
Antworten:
Manchmal weiß man, was man fragen soll. Ich wusste es nicht, da ich ein Entwickler bin, der einige DevOps-Arbeiten übernommen hat.
Anscheinend ist 'passwortlos' oder NOPASSWD-Login eine Sache, die Sie in die Datei / etc / sudoers einfügen müssen.
Die Antwort auf meine Frage lautet Ansible: Best Practice für die Pflege der Liste der Sudoer .
Das Ansible-Playbook-Codefragment sieht nach meinem Problem folgendermaßen aus:
Und das Beste daran ist, dass die Lösung idempotent ist. Die Zeile wird nicht hinzugefügt
an / etc / sudoers, wenn das Playbook ein späteres Mal ausgeführt wird. Und ja ... Ich konnte als "Deployer" auf den Server ssh und sudo-Befehle ausführen, ohne ein Passwort eingeben zu müssen.
quelle
validate: 'visudo -cf %s'
am Ende Ihreslineinfile:
Abschnitts hinzu, um sie vor dem Speichern zu überprüfen. Wenn Sie die sudoers-Datei durcheinander bringen, wird der sudo-Zugriff dauerhaft gesperrt.authorized_key
akzeptiert den Schlüssel als Zeichenfolge imkey
Parameter seit v1.9/etc/sudoers.d
, die meisten Distributionen als Standard-Include-Zeile dafür ...validate
Befehl wahrscheinlich den vollständigen Pfad benötigt, umvisudo
zu funktionieren.Um einen Benutzer mit Sudo-Berechtigungen zu erstellen, müssen Sie den Benutzer in
/etc/sudoers
ein Mitglied einer in angegebenen Gruppe einordnen oder es zu einem Mitglied machen/etc/sudoers
. Und damit es kennwort weniger ist zusätzlich angebenNOPASSWD
in/etc/sudoers
.Beispiel für
/etc/sudoers
:Und anstatt mit
/etc/sudoers
Dateien herumzuspielen , können wir eine neue Datei im/etc/sudoers.d/
Verzeichnis erstellen, da dieses Verzeichnis/etc/sudoers
standardmäßig enthalten ist, wodurch die Möglichkeit vermieden wird, vorhandene Sudoers-Dateien zu beschädigen, und auch die Abhängigkeit vom Inhalt innerhalb von beseitigt wird/etc/sudoers
.Um oben in Ansible zu erreichen, beziehen Sie sich auf Folgendes:
Sie können durch
%wheel
andere Gruppennamen wie%sudoers
oder andere Benutzernamen wie ersetzendeployer
.quelle