Ich habe auf Ansible 2.3 gewartet, da die Funktion encrypt_string eingeführt werden sollte.
Leider bin ich nicht sicher, wie ich die verschlüsselte Zeichenfolge lesen kann.
Ich habe versucht, decrypt_string , decrypt (die Datei), view (die Datei) und nichts funktioniert.
cat test.yml
---
test: !vault |
$ANSIBLE_VAULT;1.1;AES256
37366638363362303836383335623066343562666662386233306537333232396637346463376430
3664323265333036663736383837326263376637616466610a383430623562633235616531303861
66313432303063343230613665323930386138613334303839626131373033656463303736366166
6635346135636437360a313031376566303238303835353364313434363163343066363932346165
6136
Der Fehler, den ich geeting habe, ist ERROR! input is not vault encrypted data for test.yml
Wie kann ich die Saite entschlüsseln, damit ich weiß, was sie wert ist, ohne das Spiel ausführen zu müssen?
Haben Sie versucht, den verschlüsselten String als Variable festzulegen und dann -debug
zu verwenden, um die entschlüsselte Ausgabe zu erhalten?
d.h.
Definieren Sie Ihren verschlüsselten String als Variable test
in Ihrem Playbook und führen Sie dann Folgendes aus:
-debug: msg="My Secret value is {{test | replace('\n', '')}}"
in Ihrem Playbook und führen Sie dann das Playbook aus:
ansible-playbook -i localhost YourPlaybook.yml --vault-password-file path/to/your/secret_key_file
`
Sie können auch den einfachen Befehl ansible
für die jeweilige Kombination aus Host, Gruppe und Inventar verwenden, z.
$ ansible my_server -m debug -a 'var=my_secret'
my_server | SUCCESS => {
"my_secret": "373861663362363036363361663037373661353137303762"
}
Sie können die Eingabe weiterleiten und dann ansible-vault
zur Ausgabe an stderr
sagen und die stdout
zu /dev/null
umleiten, da das Tool Decryption successful
druckt.
So etwas wie:
echo 'YOUR_SECRET_VALUE' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null
Hier ist ein Beispiel:
echo '$ANSIBLE_VAULT;1.1;AES256
30636561663762383436386639353737363431353033326634623639666132623738643764366530
6332363635613832396361333634303135663735356134350a383265333537383739353864663136
30393363653361373738656361613435626237643633383261663138653466393332333036353737
3335396631613239380a616531626235346361333737353831376633633264326566623339663463
6235' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null
Ich hoffe, dass sie dies auf einfachere Weise umsetzen.
Bearbeiten: Umgebungsvariablen als Eingabe:
Um ein ähnliches Verhalten mit mehrzeiligen Umgebungsvariablen für bash
zu haben, verwenden Sie printf
anstelle von echo
.
Beispiel (Passwort: 123):
export chiphertext='$ANSIBLE_VAULT;1.1;AES256
65333363656231663530393762613031336662613262326666386233643763636339366235626334
3236636366366131383962323463633861653061346538360a386566363337383133613761313566
31623761656437393862643936373564313565663633636366396231653131386364336534626338
3430343561626237660a333562616537623035396539343634656439356439616439376630396438
3730'
printf "%s\n" $chiphertext | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null
da ganze Vault-Dateien nicht gut mit Git-Historien abgespielt werden können, ist die Verwendung von Vault-Strings in den Variablendateien der richtige Weg. Außerdem wird das Auslesen von Variablen nach Namen viel klarer.
Hier ist ein einfaches Beispiel:
Ich möchte fredsSecretString: value in vars.yml schreiben (der Wert ist fastfredfedfourfrankfurters, aber still, lass die Leute nicht wissen !!)
$ ansible-vault encrypt_string 'fastfredfedfourfrankfurters' -n fredsSecretString >> vars.yml
New Vault password: fred
Confirm New Vault password: fred
$ cat vars.yml
fredsSecretString: !vault |
$ANSIBLE_VAULT;1.1;AES256
36643662303931336362356361373334663632343139383832626130636237333134373034326565
3736626632306265393565653338356138626433333339310a323832663233316666353764373733
30613239313731653932323536303537623362653464376365383963373366336335656635666637
3238313530643164320a336337303734303930303163326235623834383337343363326461653162
33353861663464313866353330376566346636303334353732383564633263373862
Um den Wert zu entschlüsseln, geben Sie die verschlüsselte Zeichenfolge zurück in das Ansible-Vault wie folgt:
$ echo '$ANSIBLE_VAULT;1.1;AES256
36643662303931336362356361373334663632343139383832626130636237333134373034326565
3736626632306265393565653338356138626433333339310a323832663233316666353764373733
30613239313731653932323536303537623362653464376365383963373366336335656635666637
3238313530643164320a336337303734303930303163326235623834383337343363326461653162
33353861663464313866353330376566346636303334353732383564633263373862' |
ansible-vault decrypt && echo
Vault password: fred
Decryption successful
fastfredfedfourfrankfurters
$
yq extrahiert den verschlüsselten var-Wert, erstellt dann eine temporäre Datei und verwendet sie mit ansible-vault
:
cat ansible_file.yml | yq -r ".variable_name" > tmp_file.txt
# you can also use 'ansible-vault decrypt'
ansible-vault view --ask-vault-pass tmp_file.txt
Obwohl es keine Probleme gibt, verschlüsselte Zeichenfolgewerte mit anzeigbaren Debug-Meldungen oder der Verwendung von anpassbarem CLI anzuzeigen, gibt es eine weitere Lösung, die für Automatisierungsanforderungen geeignet ist. Sie können Python-Bibliotheken von ansible verwenden und in Ihrem Code verwenden (im Wesentlichen befindet sich das alles in ansible.parsing. *)
1) Geben Sie ein Tresorpasswort ein und generieren Sie einen Tresor mit Geheimnissen.
# Load vault password and prepare secrets for decryption
loader = DataLoader()
secret = vault.get_file_vault_secret(filename=vault_password_file, loader=loader)
secret.load()
vault_secrets = [('default', secret)]
_vault = vault.VaultLib(vault_secrets)
2) Laden Sie die yaml-Datei mit AnsibleLoader:
with codecs.open(input_file, 'r', encoding='utf-8') as f:
loaded_yaml = AnsibleLoader(f, vault_secrets=_vault.secrets).get_single_data()
3) Wenn Sie eine neue Zeichenfolge verschlüsseln und Ihr Wörterbuch aktualisieren müssen:
new_encrypted_value = objects.AnsibleVaultEncryptedUnicode.from_plaintext(source_system_password, _vault, vault_secrets[0][1])
loaded_yaml[target_env]['credentials'][external_system_name]['password'] = new_encrypted_variable
4) Wenn die Verarbeitung abgeschlossen ist, schreiben Sie sie mit AnsibleDumper zurück:
with open('new_variables.yml','w') as fd:
yaml.dump(loaded_yaml, fd, Dumper=AnsibleDumper, encoding=None, default_flow_style=False)
Folgendes funktioniert für mich, ähnlich wie Scudelletti, aber im Tresorpass vorbei geht, d.h.
echo '$ANSIBLE_VAULT;1.1;AES256
31363861346536343331393539323936346464386534346337306565626466393764666366363637
6533373165656431393662653463646430663933363431380a336130363131373238326330393931
39343533396161323834613030383339653633393133393932613562396630303530393030396335
3630656237663038630a363032373633363161633464653431386237333262343231313830363965
31393930343532323133386536376637373463396534623631633234393565373337613530643031
38393862616635326339373731353465303364303365336132613566396666626536636533303839
393465653830393231636638643735313666' | ansible-vault decrypt --vault-password-file /path/to/your/.vault_pass.txt /dev/stdin --output=/dev/stderr > /dev/null && echo
Die Ausgabe erfolgt dank des nachgestellten && echo
in einer eigenen Zeile. Die Erlaubnis meines Vault-Passes beträgt 644, wenn Sie auf Erlaubnisfehler stoßen.
Ich hoffe es hilft!
Dieser eine Befehl extrahiert nur die verschlüsselten Daten und leitet sie an die Entschlüsselung weiter. Ich mag es ein bisschen besser, da Sie die Daten nicht manuell extrahieren müssen.
cat test.yml | grep -v vault| awk '{$1=$1;print}' | ansible-vault decrypt