我正在尝试在 git 中设置清理/涂抹过滤器,以便通过ansible-vault命令自动加密和解密包含机密的文件。
ansible-vault 命令的特殊性在于它不是幂等的(每次在相同数据上调用它时都会创建不同的二进制文件)。
我从这个博客页面中建议的实现开始。不幸的是,它没有正常工作,因为每当调用 smudge 时(无论是 git checkout 还是 git status),秘密文件看起来都像 git 修改过的一样,即使不是。
所以我想知道 git 是否会将索引中的二进制文件与干净过滤的当前文件进行比较,我尝试在这些脚本上构建如下:
#!/bin/sh -x
# clean filter, it is invoked with %f
if [ ! -r "$HOME/.vault_password" ]; then
exit 1
fi
tmp=`mktemp`
cat > $tmp
# get the plain text from the binary in the index
tmphead=`mktemp`
git show HEAD:$1 > $tmphead
contenthead=`echo "embedded" | ansible-vault view $tmphead --vault-password-file=$HOME/.vault_password`
export PAGER=cat
echo -n "$contenthead" | tee $tmphead …Run Code Online (Sandbox Code Playgroud) 我有一个与其他团队共享的部署项目。我已使用保险库加密了我的秘密。我想使用密码对生产文件进行加密,并使用其他密码对登台文件进行加密,以避免其他团队访问生产机密。
有可能这样做吗?
我已经做了类似的事情。我的秘密:
cat /group_vars/all/vault_production.yml (encrypt with password A)
production_password: 'test1'
cat/group_vars/all/vault_staging.yml (encrypt with password B)
staging_password: 'test2'
Run Code Online (Sandbox Code Playgroud)
我的环境:
cat hosts-production
[all:vars]
env_type=production
cat hosts-staging
[all:vars]
env_type=staging
Run Code Online (Sandbox Code Playgroud)
我的剧本:
- copy:
content: |
env PASS={{hostvars[inventory_hostname][env_type + '_password']}}
...
Run Code Online (Sandbox Code Playgroud)
然后我像这样启动剧本。
# for production
ansible-playbook -i hosts-staging test.yml --vault-password-file .password_a
# for staging
ansible-playbook -i hosts-staging test.yml --vault-password-file .password_b
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为有两个不同的密码(错误!解密失败)。你知道怎么做吗 ?
谢谢。
BR
埃里克
我正在使用Ansible 2.2从我的笔记本电脑管理一些云服务器.我想将OpenSSL私钥传输到其中一个服务器上的特定位置,以供nginx用于TLS终止.当然,这是一个应保密的文件,因此我使用Ansible Vault对其进行了加密.但Vault仅保护控制计算机上的磁盘文件.将数据从控制机器传输到受管节点时,它不起作用.
我想确保监控网络流量的人在传输过程中不会泄露私钥.我没有具体提到我正在寻找的内容,我可以在模块的文档中copy看到.据我所知,我与被管节点的所有通信都是通过SSH完成的.这是一个安全的假设吗?它是否包含文件传输?
我需要一个使用 ansibleVault 存储和加密密码的文件,我创建了一个名为“passes”的加密文件,存储在 group_vars 中,解密后内容如下:
---
testvar: password
Run Code Online (Sandbox Code Playgroud)
我创建了剧本文件:
---
- hosts: [machines]
vars:
include_vars:
file: group_vars/passes
roles:
- role: someroletodeployafilewiththispass
Run Code Online (Sandbox Code Playgroud)
该角色只是使用模板的传递来部署一个文件,该文件是:
using vaulted var {{ testvar }}
Run Code Online (Sandbox Code Playgroud)
每次我使用塔启动此程序时都会收到错误消息
"msg": "AnsibleUndefinedVariable: 'testvar' 未定义"
有什么想法我做错了什么吗?没有迹象表明我的加密文件正在被 ansible 解密。还有我刚刚粘贴的加密文件:
$ANSIBLE_VAULT;1.1;AES256
303965366239313330646366313238...
Run Code Online (Sandbox Code Playgroud)
也许加密的文件看起来应该有所不同,以便 Ansible 能够解密它?
是否可以解决ansbile-vault在PyCharm的GUI 中加密的文件中的冲突?
我试图按照已接受答案中提供的说明进行更改,该说明如何区分可更改的保管库更改?。我在.vault_password文件中输入了ansible-vault密码,.gitattributes并在其中设置了特定的文件路径并运行
git config --global diff.ansible-vault.textconv "ansible-vault view --vault-id .vault_password"
Run Code Online (Sandbox Code Playgroud)
但是,这似乎仅适用于从命令行显示差异。
比较冲突文件时是否可以使其适用于PyCharm?我希望对它们进行解密,从而使其内容与常规文件一样可见,因此我可以轻松解决冲突。
如果在过程结束时对已解决的冲突文件进行加密,那也将是完美的。
通过阅读文档,
您无法重新设置加密变量的密钥
例如,如果这是 的内容group_vars/all.yaml,我想重新加密所有加密的变量。
key_tab: !vault |
$ANSIBLE_VAULT;1.1;AES256
30333939663734636530386263663437343431353539643366633534366239643763326138653232
3562383132623937346138613833396563653038646165300a623061363063663132373739373031
66623133393239376366383235353332366336386532643637343438653634633734346639636334
3633363032376339340a663531346633623466643163353638303534313937663931633962383637
3637
certs:
- file: client.cert
password: !vault |
$ANSIBLE_VAULT;1.1;AES256
35626163653930386265393064326330393433343763626534373330393432373231633365656534
6237626631326634333963313733356531623239653161370a356666326631663565396633396139
32303962343064343530383364616235343130373935313161353135613539653061363735336337
3636633036313565640a663736613065396262336433653564373161393431636661666134643761
3639
Run Code Online (Sandbox Code Playgroud)
我尝试用一些 bash 命令来做到这一点,但由于缩进,它变得很复杂。
是否有一种自动化的方法来完成此重新密钥?
当提示输入密码时,如何将密码传递给我的 python 脚本。我不希望用户在提示时输入密码。它应该直接从脚本传递。
subprocess.run(['ansible-vault', 'decrypt', 'main.yml', 'linux.yml','--ask-vault-pass'])
Run Code Online (Sandbox Code Playgroud)
在运行脚本时,它会提示输入密码。我希望密码仅从脚本传递,而不是由用户传递或传递密码文件。
有没有办法在这里传递密码?我有其他 ansible 保险库选项,如保险库密码等,但这不符合我的目的。
我使用以下结构将我的内容host_vars分为明文和加密
ansible\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ansible.cfg\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 host_vars\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 host1\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 vars\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vault\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 host2\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 vars\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vault\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 inventory\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 site.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vars\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ansible_vars.yaml\nRun Code Online (Sandbox Code Playgroud)\n有没有一种方法,ansible-vault可以用来加密两个指定的文件vault,还是我必须一一加密它们?
只是问一下,因为还会有更多内容,例如在未来的目录group_vars中等。
我知道这有效
\nansible-vault encrypt host_vars/host1/vault host_vars/host2/vault\nRun Code Online (Sandbox Code Playgroud)\n只是询问是否有更优雅/快速的解决方案
\n我在通过pip安装的OSX上运行ansible 1.9.4.
如果我做ansible-vault create x,然后做一些修改并保存,然后每当我做的文件显示为空白ansible-vault view x或ansible-vault edit x.
我有Sublime Text 3作为我的$ EDITOR.当我将其设置为vim时,它全部按预期工作,我可以编辑和保存使用ansible-vault加密的文件.知道这里会发生什么吗?
我在本地计算机上有一个文件要上传到远程服务器,它包含我不想在我的VCS中公开的机密信息.它还有一些我需要在其中动态替换的文本(目前为Jinja2占位符"{{}}").
如果我使用复制模块,那么当我上传文件时文件是非拱形的,但显然替换了占位符.
如果我使用模板模块,那么它不会破坏文件,因此它以加密格式上传(并且也不会替换占位符,因为它们被加密模糊).
如何将文件(使用ansible)模板和取消保存到远程服务器?
ansible ×10
ansible-vault ×10
encryption ×2
git ×2
python ×2
jinja2 ×1
pycharm ×1
security ×1
sublimetext3 ×1
templates ×1