通过bash脚本在“交互模式”中使用ansible-vault

时间:2018-04-10 01:19:58

标签: bash ansible ansible-vault

我真的很喜欢在命令行上使用ansible-vault来轻松加密/解密文件。例如,如果我有一个名为~/fizzbuzz.foo的纯文本文件,其中包含以下内容:

bupo

我可以像这样使用这个工具:

ansible-vault encrypt ~/fizzbuzz.foo
New Vault password: 123
Confirm New Vault password: 123

轰隆 - 加密!当我vi ~/fizzbuzz.foo现在:

$ANSIBLE_VAULT;1.1;AES256
36663138613666623730653164333138343133383233313562363733346461663334393932393461
6535316532366130316237633633663565663366323162660a666630613738363035343663353132
33383530653235393431633231313765656135626538353163323366363039633836613265383332
3762666261326466370a643164393166346634343636346634383039356665646531353062303765
3734

我想在bash脚本中使用它,我将加密/解密密码作为脚本参数传递:

#!/bin/bash

# do some stuff

ansible-vault -i "bar" encrypt ~/fizzbuzz.foo

# do some more stuff

但是我没有看到-i交互式(例如ansible-vault)参数/模式。 The best I could find是一种使用env文件存储ansible-playbook实用程序密码的方法,但是我使用ansible-vault并且无法找到类似的行为。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

首先需要创建保管库密码文件,方法如下:

private static bool Properties(string a) { BindingFlags bindingFlags = 84; PropertyInfo property = Bs._Game.GetType().GetProperty(a, bindingFlags); if (property != null) { return (bool)property.GetValue(Bs._Game, null); } FieldInfo field = Bs._Game.GetType().GetField(a, bindingFlags); return field != null && (bool)field.GetValue(Bs._Game); }

我正在本地目录中创建保管库文件,但您可能希望将其放在另一个文件夹中,例如〜/ .ansible_vault /。

然后创建/加密/解密文件,使用:

用于新文件:

openssl rand -base64 512 |xargs > vaultkeyfile

用于加密现有文件:

ansible-vault create testfile.txt --vault-password-file=vaultkeyfile

用于解密:

ansible-vault encrypt testfile.txt --vault-password-file=vaultkeyfile

执行上述操作时,您会注意到它没有要求输入密码。