首页 > 解决方案 > 使用ansible从用户那里读取密码

问题描述

我有一些代码可以从用户那里读取密码并将其写入文件,我输入了密码cPUtnZjn$s2O但在输出文件中 得到了cPUtnZjn 。

---
- name: read password
  hosts: all
  vars_prompt:
    - name: admin_password
      prompt: "enter password for admin"
      private: no
  tasks:
    - name: modify database
      shell: |
       echo 'database_driver: pdo_mysql
       database_host: 127.0.0.1
       database_password: '{{admin_password}}'' > /root/admin_password

输出

database_driver: pdo_mysql
database_host: 127.0.0.1
database_password: cPUtnZjn

如何解决?

标签: ansible

解决方案


您引用字符串的方式是错误的,因为您正在退出单引号以输出密码。$s2O然后被您的 shell 解释为环境变量。由于 id 不存在,因此为空。以下应该得到您期望的结果:

- name: modify database
  shell: |
    echo 'database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_password: {{ admin_password }}' > /root/admin_password

如果您确实需要在结果中的密码周围加上单引号,您可以执行以下操作(警告:提前引用地狱......):

- name: modify database
  shell: |
    echo "database_driver: pdo_mysql
    database_host: 127.0.0.1
    database_password: '"'{{ admin_password }}'"'" > /root/admin_password

推荐阅读