如何使用 Ansible 传递密码?

How pass password with Ansible?

我正在尝试 运行 Ansible 中的这个任务:

- name: zabbix database
  shell:
    chdir: /usr/share/doc/zabbix-server-mysql-4.0.33/
    cmd:  zcat create.sql.gz | mysql -u muhannad -p zabbix_db

zcat create.sql.gz 运行需要输入密码时,Ansible因为等待输入密码而卡住了,我如何从客户端设置密码?

提示输入密码的不是 zcat,而是 mysql

您可以通过 -p 命令行开关传递密码,例如,如果您的密码是 mypassword:

mysql -u muhannad -pmypassword zabbix_db

但请注意,除其他外,这将使您的密码在 ps 中可见。或者,您可能更喜欢通过环境或通过 my.cnf.

指定密码

可以使用expect模块指定密码输入。

- name: Provide password 
  expect:
     command: zcat /usr/share/doc/zabbix-server-mysql-4.0.33/create.sql.gz | mysql -u muhannad -p zabbix_db
     responses:
        'password': "{{mysql_password}}"

您可以使用 Ansible Vault 来管理敏感数据。

详细说明请参考official documents of Vault | Ansible Documentation.

创建加密(Encrypted)文件。

 $ ansible-vault create foo.yml

编辑加密文件的内容。

$ ansible-vault edit foo.yml

更改加密密钥(密码)。

$ ansible-vault rekey foo.yml

加密现有明文文件

$ ansible-vault encrypt foo.yml

解密加密文件。

$ ansible-vault decrypt foo.yml

查看加密文件内容

$ ansible-vault view foo.yml