web-dev-qa-db-de.com

So entschlüsseln Sie den String mit Ansible-Vault 2.3.0

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?

27
MMT

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

`

10
NAF

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"
}
22
famousgarkin

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
12
Scudelletti

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
    $
9

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
1
alfredocambera

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)
1
andruhan

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!

1
radtek

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
0
Scott Carlson