如何阻止将密码写入日志文件?

我正在设置一个MySQL服务器,并希望Ansible在安装过程中设置mysql-root密码。

在互联网的帮助下,我想出了这个解决scheme:

 - 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是一个从Ansible Vault加载的variables。 这运行正常,但现在在服务器上有很多日志中的行:

 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 

如何阻止Ansible将明文密码写入日志文件?

为防止logging机密信息的任务,请在syslog或其他系统日志中设置no_log:true:

 - name: secret stuff command: "echo {{secret_root_password}} | sudo su -" no_log: true 

任务的运行仍然会被logging下来,但是没有什么细节。 另外,使用的模块必须支持no_log,所以testing自定义模块。

有关更多详细信息,请参阅Ansible FAQ 。 它可以应用到整个剧本,但是输出会受到“审查”的一点点讨厌! 消息。

观察到的行为似乎是debconf模块中的一个错误。 我提交了一个错误报告 。

github上的用户bcoca指出,可以在任务中使用no_log: true指令,设置密码以防止日志logging。 这是一个解决方法,这个工作对我来说,直到错误被修复。

我通过将Ansible版本升级到1.6.1来解决

 sudo pip install ansible==1.6.1 

根据Ansible文档 :

log_path

如果存在并在ansible.cfgconfiguration,Ansible将在指定位置logging有关执行的信息。 确保运行Ansible的用户对日志文件具有权限:

 log_path=/var/log/ansible.log 

此行为默认情况下不是。 请注意,如果没有这个设置,那么将会logging被调用到被pipe理机器的系统日志的模块参数。 密码参数被排除在外。

听起来像在控制节点上设置log_path将导致没有在目标节点上的日志。