ansible - 如何混淆剧本中的字符串
问题描述
我有一个调用脚本文件的剧本。它将向脚本文件传递一个秘密。
我想要的是秘密不在标准输出中显示。
根据 ansible 文档,可以使用,但是在设置env 变量no_log: true
时这将不起作用。ANSIBLE_DEBUG
true
我还发现,在“设置执行文件和参数”任务中,即使使用no_log: true
.
---
- block:
- name: Set Execution File and parameters
set_fact:
scriptfile: "{{ansible_user_dir}}\\scripts\\host_check.ps1"
params: " -servername '{{the_host_name}}' -secret {{my_secret}}"
- name: Execute script
win_command: powershell.exe "{{scriptfile}}" "{{params}}"
no_log: True
rescue:
- debug:
msg: "Play failed"
我想将my_secret
变量替换为*******
解决方案
其实no_log: true
是你能做的。Ansible 需要知道你的秘密才能使用它,任何可以设置的人ANSIBLE_DEBUG
也可以编辑你的剧本来显示秘密。因此,只要你隐藏它,它总是可以被揭示出来。
但是,您可以使用密码加密并将ansible-vault
密码传递给 ansible,因此除了您(或拥有密码)之外,没有人可以使用(以及我的这个显示)该密码。
这是加密值的方式(<secret-value>
在本例中):
ansible-vault encrypt_string --ask-vault-pass '<secret-value>' --name 'secret'
您将被要求输入密码(我test
在这里使用过),然后会得到如下所示的内容:
secret: !vault |
$ANSIBLE_VAULT;1.1;AES256
36323534396462626132653332653266393832306337336164373834626330373132363136633865
6161623130363364643138633236306334313833663535380a666261383838313631396264626534
66373637653937616231353361633635353238333630303563343630333161626137396332616263
3966356531613234370a633331333862616164386130663262613430316630373230373833313330
6265
你把它放在你的库存中(只是一个例子,它应该是什么样子,你需要放入你的主机和其他变量):
---
all:
hosts:
your-host:
vars:
secret: !vault |
$ANSIBLE_VAULT;1.1;AES256
36323534396462626132653332653266393832306337336164373834626330373132363136633865
6161623130363364643138633236306334313833663535380a666261383838313631396264626534
66373637653937616231353361633635353238333630303563343630333161626137396332616263
3966356531613234370a633331333862616164386130663262613430316630373230373833313330
6265
the_host_name: host.name
ansible_user_dir: 'C:\\some\\dir'
然后你可以在你的剧本中这样做:
---
- block:
- name: Execute script
win_command: 'powershell.exe "{{ ansible_user_dir }}\\scripts\\host_check.ps1" -servername "{{ the_host_name }}" -secret "{{ my_secret }}"'
no_log: true
rescue:
- debug:
msg: "Play failed"
你需要--ask-vault-pass
像这样运行它:
ansible-playbook -i your-inventory.yml your-playbook.yml --ask-vault-pass
每次运行时它都会要求您输入密码,因此请确保将其保存在某个地方。
如果您在一次运行中使用多个加密值,则需要使用相同的密码来加密所有这些值。
推荐阅读
- python - 有一个关于 pymongo(cursor) 的问题
- angular - 在 ag-grid 上使用单元格列宽导出到 excel
- go - 在golang谷歌云后端功能中获取参数
- react-native - 使用 React Navigation 版本 5 时如何传递自定义道具?
- node.js - 节点;用户通过远程文件服务器下载
- mysql - Azure VM 扩展预配完成时间过长
- apache-camel - Apache camel-K:ActiveMQ 发射器实例化问题
- c++ - OSX蓝牙openRFCOMMChannelAsync声称已连接但未建立连接并且从未调用委托
- postgresql - PostgreSQL 恢复后的串行冲突
- php - 错误建立数据库连接 docker compose