日志路径

日志路径

我正在设置 MySQL 服务器,并希望 Ansiblemysql-root在安装期间设置密码。

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

- 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 加载的变量。这运行正常,但现在服务器上的日志中有很多行:

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 将明文密码写入日志文件?

答案1

为了防止包含机密信息的任务被记录在系统日志或其他文件中,请no_log: true在任务上进行设置:

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

任务的运行仍将被记录,但细节较少。此外,使用的模块必须支持no_log,因此请测试自定义模块。

Ansible 常见问题解答了解更多详情。它可以应用于整个剧本,但是输出结果有点令人讨厌,因为“被审查了!“消息。

答案2

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

github 上的用户 bcoca 指出,可以使用no_log: true设置密码的任务中的指令来阻止日志记录。这是一种解决方法,在错误修复之前对我来说是有效的。

答案3

有比 no_log 更好的方法:True

- name: write in string variables login and password
  set_fact:
    temp_user: "{{ USER_VAR }}"
    temp_pass: "{{ PASSWORD_VAR }}"


- name: Your operation with password in output
  shell: '/opt/hello.sh'
  ignore_errors: True
  no_log: True
  register: myregister

- debug:
    msg: '{{ myregister.stderr | regex_replace(temp_user) | regex_replace(temp_pass) }}'
  when: myregister.stderr != ""

- debug:
    msg: '{{ myregister.stdout | regex_replace(temp_user) | regex_replace(temp_pass) }}'
  when: myregister.stdout != ""

- fail:
    msg: "error shell /opt/hello.sh"
  when: myregister.stderr != ""

如您所见,您需要添加:

ignore_errors: true
no_log: true

然后使用 regex_replace 输出命令的结果,其中:

USER_VAR-登录变量

PASSWORD_VAR - 密码变量

通过这种方法,你不仅可以隐藏密码和登录名,还可以获得操作的输出

答案4

按照Ansible 文档

日志路径

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

log_path=/var/log/ansible.log 

默认情况下不启用此行为。请注意,如果没有此设置,ansible 会将调用的模块参数记录到受管计算机的 syslog 中。密码参数除外。

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

相关内容