1
ansible all -m authorized_key -a 'name=automation key="{{lookup('file','/home/automation/.ssh/id.pub') }}' -C

ansible all -m authorized_key -a 'name=automation key="{{lookup('file','/home/automation/.ssh/id.pub') }}' -CD

ansible all -m authorized_key -a 'name=automation key=' {{lookup('file','/home/automation/.ssh/id.pub') }}' -CD

ansible all -m authorized_key -a "name=automation key=' {{lookup('file','/home/automation/.ssh/id.pub') }}" -CD

错误!拆分参数失败,无论是不平衡的 jinja2 块还是引号:name=automation key=' {{lookup('file','/home/automation/.ssh/id.pub') }}

我尝试了所有这些组合,但没有一个有效。
实现这一目标的正确方法是什么?

4

2 回答 2

3

您必须在 shell 中转义引号,并确保在收到后一切正常。在这种情况下,使用单引号作为最外层的引号可能是最难的选择。以下是四种(非详尽)可能的解决方案(使用双引号作为最外层引用):

ansible all -m authorized_key -a "name=automation key='{{ lookup(\"file\", \"/home/automation/.ssh/id.pub\") }}'" -CD

ansible all -m authorized_key -a "name=automation key='{{ lookup(\\'file\\', \\'/home/automation/.ssh/id.pub\\') }}'" -CD

ansible all -m authorized_key -a "name=automation key=\"{{ lookup('file', '/home/automation/.ssh/id.pub') }}\"" -CD

ansible all -m authorized_key -a "name=automation key=\"{{ lookup(\\\"file\\\", \\\"/home/automation/.ssh/id.pub\\\") }}\"" -CD
于 2020-07-12T20:53:54.507 回答
0

由于模块参数 (-a) 意味着 <argument_name>= 之后的所有内容都是一个字符串,因此您不需要在 '=' 之后使用额外的引号,并且可以在没有任何额外引号的情况下使用查找:

ansible all -m authorized_key -a "name=automation key={{ lookup('file', '/home/automation/.ssh/id.pub') }}"

或者

ansible all -m authorized_key -a 'name=automation key={{ lookup("file", "/home/automation/.ssh/id.pub") }}'

只要确保您使用不同类型的引号即可。

将 -a 中的模块参数视为 yaml 格式的相同参数,除非它们的值以特殊字符开头,否则您不需要保护它们。

于 2021-05-11T20:00:38.117 回答