密码中的Ansible特殊字符

时间:2018-03-07 13:43:47

标签: python ansible ansible-2.x

我从加密的ansible-vault文件中读取了我的root密码。 但是当我在ansible_become_pass上使用它时,操作失败,因为密码包含一个特殊字符。在我的示例中" "

这是我的yml:

- hosts: sirius
  remote_user: ansusr
  become: yes
  vars_files:
     - vault_vars.yml
  become_pass: "{{ root_pass_sirius }}" 

ansible-playbook check.yml --ask-vault-pass

fatal: FAILED! => {"msg": "{{ TesT#1234 }}: template error while templating string: unexpected char '#' at 6. String: {{ TesT#1234 }}"}

如何屏蔽#字符?

6 个答案:

答案 0 :(得分:1)

在实际运行该加密命令之前使用set +H

答案 1 :(得分:0)

这可能有用。

become_pass: "{{ root_pass_sirius | regex_escape() }}" 

答案 2 :(得分:0)

尝试单引号而不是双引号:

become_pass: '{{ root_pass_sirius }}'

答案 3 :(得分:0)

您可以尝试的另一件事是报价过滤器:

become_pass: "{{ root_pass_sirius | quote }}" 

答案 4 :(得分:0)

尝试一下"'"{{ }}"'"

或这个$'{{ }}'

其Jinja模板

答案 5 :(得分:0)

我有一个不同的符号:$ 解密时这个符号消失了(以及它后面的内容),以下解决方案有所帮助:

  1. 将“替换为'

即:

shell: 'echo '{{ password }}'' - 这可以正常工作,但在这里:

shell: 'echo '{{ password }}'' - 它不起作用。

  1. 添加替换

即:

- name: replace
  set_fact:
    password: "{{ password | replace ('\n', '') | replace ('\r', '') }}"

总而言之,它看起来像这样:

- name: replace
  set_fact:
    password: "{{ password | replace ('\n', '') | replace ('\r', '') }}"
- name: echo
  shell: "echo '{{ password }}'"