Ich richte einen MySQL-Server ein und möchte, dass Ansible das mysql-root
Passwort während der Installation setzt.
Mit Hilfe des Internets habe ich diese Lösung gefunden:
- name: Set MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Confirm MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Install Mysql
apt: pkg=mysql-server state=latest
mysql_root_pwd
ist eine Variable, die aus dem Ansible Vault geladen wird. Das läuft gut, aber jetzt gibt es auf dem Server viele Zeilen im Protokoll:
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password name=mysql-server unseen=None
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password_again name=mysql-server unseen=None
Wie kann ich Ansible daran hindern, Klartextkennwörter in die Protokolldateien zu schreiben?
Das beobachtete Verhalten scheint ein Fehler im Debconf-Modul zu sein. Ich habe einen Fehlerbericht eingereicht .
Der Benutzer bcoca bei github wies darauf hin, dass man die
no_log: true
Direktive in Tasks verwenden kann, die Passwörter setzen, um die Protokollierung zu verhindern. Dies ist eine Problemumgehung, die für mich funktioniert, bis der Fehler behoben ist.quelle
ERROR: no_log is not a legal parameter in an Ansible task or handler
sudo apt-add-repository ppa:ansible/ansible
,sudo apt-get update
,sudo apt-get install ansible
Ich habe das Problem durch ein Upgrade von Ansible auf 1.6.1 gelöst
quelle
Wie laut Ansible docs :
Klingt so, als ob die Einstellung
log_path
auf Ihrem Steuerknoten dazu führt, dass sich keine Protokolle auf den Zielknoten befinden.quelle
vtype='password'
. Das sollte IMHO explizit genug sein? Ich gehe davon aus, dass die Protokollnachricht auch vom debconf-Modul erstellt wird.Es gibt einen besseren Weg als nur no_log: Richtig
Wie Sie sehen, müssen Sie Folgendes hinzufügen:
Und dann machen Sie die Ausgabe des Ergebnisses des Befehls mit regex_replace, wobei:
Mit diesem Ansatz verbergen Sie nicht nur die Kennwörter und Anmeldungen, sondern erhalten auch die Ausgabe Ihres Vorgangs
quelle
Dies ist eine Ergänzung zur Antwort von TheDESTROS aus diesem Thread:
wrapper-script.sh.j2
Sie benötigen etwas weniger Code und können die Befehle in Ihren Protokollen ausgeben. Es gibt nur einen Caveeat, wenn das Kommando stdout ein Geheimnis enthält. Wenn Sie die externe Vorlage vermeiden möchten, hilft das
copy
Modul mit dem Parametercontent
möglicherweise dabei, ein kleines Wrapper-Skript im Handumdrehen zu schreiben.quelle
Der
no_log: true
Ansatz ist als letzter Ausweg zu verwenden, wenn andere Versuche fehlschlagen, da dadurch die Taskausführung völlig undurchsichtig wird und Sie keine Ahnung haben, wann sie fehlschlägt.In den Sicherheitspraktiken wird empfohlen, Anmeldeinformationen über stdin oder, wenn dies nicht möglich ist, über Anmeldeinformationsdateien (oder sogar über ausführbare Dateien) anzugeben.
Hier ist ein Beispiel, wie Sie eine sichere Podman-Anmeldung durchführen, indem Sie vermeiden, dass das Kennwort angezeigt wird:
Damit wird das Geheimnis nicht enthüllt,
result
aber Sie können weiterhin die Ausgabe des Befehls sehen.Die meisten Tools, die eine Anmeldung benötigen, implementieren einen der genannten sichereren Ansätze. Das Verwenden von Anmeldeinformationen für die CLI im Code entspricht dem Verwenden
123456
Ihres Bankkennworts.quelle