我需要在目标服务器上运行一个仅通过 stdin 接受数据的命令。我提供给它的数据来自模板文件,包含敏感数据,因此我宁愿不让这些数据在文件系统中停留哪怕一秒钟。
我正在尝试找到一种方法来获取模板任务的输出,以便将其传递给命令。例如:
- name: generate data
template:
src: data.j2
dest: [I'd rather not have any files written]
register: myvar
- name: run command
shell: "command < {{ myvar }}"
有没有更好的方法来解决这个问题,而不涉及写入临时文件,将其提供给命令然后删除它?
答案1
得到了 ansible 家伙的回答:
some_var: "{{ lookup('template', 'tmpl.j2') }}"
答案2
处理需要输入的命令的正确方法stdin
是预计模块。
使用 Ansible 处理敏感数据的正确方法是ansible 保险库. 不管怎样,当 Ansible 创建 Python 脚本来执行任务下定义的命令时,数据都会以未加密的形式保存在文件系统中。
答案3
结合之前的几个答案,我们得到:
- name: run command
command: "command"
args:
stdin: "{{ lookup('template', 'tmpl.j2') }}"