我尝试使用ansible_ssh_pass选项运行ansible playbook以连接到目标服务器。
ansible-playbook test-playbook.yml -i hosts -u daniel --extra-vars "{"ansible_ssh_pass":"u5!vuL!<35Lf?<>n'x"}"
问题是密码有特殊字符。 我试着用它来保存它。
"password\'s"
"password"
"\"password\""
知道如何保存密码?
答案 0 :(得分:0)
我知道对于ansible-vault,您可以在文件中指定密码,我假设在这种情况下这也可以,但我不是正面的。
ansible-playbook test-playbook.yml -i hosts -u daniel --extra-vars ansible_ssh_pass=/path/to/file.txt
答案 1 :(得分:0)
如果你删除单引号特殊字符,你可以围绕其余部分做单引号,它应该有效:
ansible-playbook test-playbook.yml -i hosts -u daniel -e ansible_ssh_pass='u5!vuL!<35Lf?<>nx'
答案 2 :(得分:0)
可能有点晚了,但针对您的具体问题的确切解决方案是:
ansible-playbook test-playbook.yml -i hosts -u daniel --extra-vars ansible_ssh_pass=$'"u5!vuL!<35Lf?<>n\'x"'
shell专门处理$'<string>'
并逃避内部的单引号(参见反斜杠)
最外层的双引号是必要的,这样jinja2模板引擎就不会在ansible中混淆。
话虽如此,至少有两个原因运行这样的命令是一个非常糟糕的主意:
对于第一个问题,并且如果您确定只有一台计算机(或者在任何地方都使用相同的密码),您可以使用vars_prompt以交互方式请求密码(例如http://docs.ansible.com/ansible/latest/user_guide/playbooks_prompts.html)
解决这两个问题的最佳方法是使用保险库加密将密码添加到特定主机的广告资源中。然后,当您调用该剧本时,可以交互方式提供整体保管库密码(--ask-vault-pass)或通过安全保护的保管库密码文件(--vault-password-file =)。