Подтвердить что ты не робот

Как расшифровать строку с помощью скрытого хранилища 2.3.0

Я ждал, когда будет существовать 2.3, поскольку он собирается ввести функцию encrypt_string.

К сожалению, я не уверен, как я могу прочитать зашифрованную строку.

Я попробовал decrypt_string, расшифровать (файл), представление (файл) и ничего не работает.

cat test.yml 
---
test: !vault |
     $ANSIBLE_VAULT;1.1;AES256
     37366638363362303836383335623066343562666662386233306537333232396637346463376430
     3664323265333036663736383837326263376637616466610a383430623562633235616531303861
     66313432303063343230613665323930386138613334303839626131373033656463303736366166
     6635346135636437360a313031376566303238303835353364313434363163343066363932346165
     6136

Ошибка, которую я собираю, - ERROR! input is not vault encrypted data for test.yml

Как я могу расшифровать строку, чтобы я знал ее значение без необходимости запускать игру?

4b9b3361

Ответ 1

Вы пытались установить зашифрованную строку как переменную, а затем с помощью -debug получить свой расшифрованный вывод?

то есть.

Определите свою зашифрованную строку как переменную test в своей книге, а затем выполните:

-debug: msg="My Secret value is {{test | replace('\n', '')}}"

в вашем плейбуке, а затем запустите playbook:

ansible-playbook -i localhost YourPlaybook.yml --vault-password-file path/to/your/secret_key_file

`

Ответ 2

Вы также можете использовать обычную команду ansible для соответствующей комбинации хоста/группы/инвентаря, например:

$ ansible my_server -m debug -a 'var=my_secret'
my_server | SUCCESS => {
    "my_secret": "373861663362363036363361663037373661353137303762"
}

Ответ 3

Вы можете подключить вход, затем сообщить ansible-vault для вывода на stderr, а затем перенаправить stdout в /dev/null, так как инструмент печатает Decryption successful.

Что-то вроде:

echo 'YOUR_SECRET_VALUE' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null

Вот пример:

echo '$ANSIBLE_VAULT;1.1;AES256
30636561663762383436386639353737363431353033326634623639666132623738643764366530
6332363635613832396361333634303135663735356134350a383265333537383739353864663136
30393363653361373738656361613435626237643633383261663138653466393332333036353737
3335396631613239380a616531626235346361333737353831376633633264326566623339663463
6235' | ansible-vault decrypt /dev/stdin --output=/dev/stderr > /dev/null

Надеюсь, они реализуют более простой способ сделать это.

Изменить: переменные окружения в качестве ввода:

Чтобы иметь аналогичное поведение с многострочными переменными среды на bash, используйте printf вместо echo

Пример (пароль: 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

Ответ 4

так как целые файлы хранилища плохо воспроизводятся с историями git, использование строк хранилища в файлах переменных - путь, который также делает grepping out переменными по имени намного яснее.

Вот простой пример:

Я хочу поставить fredsSecretString: значение в vars.yml(его значение - fastfredfedfourfrankfurters, но тише, не позволяйте людям знать!)

$ 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

Чтобы расшифровать значение, запишите зашифрованную строку обратно в безопасное хранилище  следующим образом:

    $ echo '$ANSIBLE_VAULT;1.1;AES256
    36643662303931336362356361373334663632343139383832626130636237333134373034326565
    3736626632306265393565653338356138626433333339310a323832663233316666353764373733
    30613239313731653932323536303537623362653464376365383963373366336335656635666637
    3238313530643164320a336337303734303930303163326235623834383337343363326461653162
    33353861663464313866353330376566346636303334353732383564633263373862' |
 ansible-vault decrypt && echo
    Vault password: fred
    Decryption successful
    fastfredfedfourfrankfurters
    $

Ответ 5

Вот то, что работает для меня, похоже на то, что делает Скуделлетти, но проходит через проход в хранилище, т.е.

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

Для удобства вывод будет находиться на отдельной строке благодаря трейлингу && echo. Разрешение моего прохода в хранилище составляет 644, если вы столкнетесь с какими-либо ошибками разрешения.

Надеюсь, поможет!

Ответ 6

Несмотря на то, что нет проблем с отображением зашифрованных строковых значений с доступными сообщениями отладки или использованием ansible cli, есть еще одно решение, которое может быть удобным для нужд автоматизации. Вы можете использовать python libs от ansible и использовать их в своем коде (в основном, все это находится в файле ansible.parsing. *)

1) Предоставьте пароль хранилища и сгенерируйте "хранилище" секретами.

# 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) Загрузите файл yaml с помощью AnsibleLoader:

with codecs.open(input_file, 'r', encoding='utf-8') as f:
    loaded_yaml = AnsibleLoader(f, vault_secrets=_vault.secrets).get_single_data()

3) Если вам нужно зашифровать новую строку и обновить словарь:

    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) После полной обработки напишите обратно с помощью AnsibleDumper:

with open('new_variables.yml','w') as fd:
    yaml.dump(loaded_yaml, fd, Dumper=AnsibleDumper, encoding=None, default_flow_style=False)

Ответ 7

Вот еще один способ расшифровки строк

$ ansible localhost \
       -m debug \
       -a "var=mysecret" \
       -e "@inventory/group_vars/master"
localhost | SUCCESS => {
"mysecret": "somesecret\n"
}

Хитрость в том, что мы передаем файл с секретным хранилищем Ansible, mysecret внутри него ansible, и он может его расшифровать.

ПРИМЕЧАНИЕ. Если у вас нет пароля для расшифровки секретного зашифрованного секрета Ansible, вы также можете передать его:

$ ansible localhost --vault-password-file=~/.vault_pass.txt \
       -m debug \
       -a "var=mysecret" \
       -e "@inventory/group_vars/master"
localhost | SUCCESS => {
"mysecret": "somesecret\n"
}

Ответ 8

Эта команда извлекает только зашифрованные данные и передает их для расшифровки. Мне нравится это немного лучше, так как вам не нужно вручную извлекать данные.

$ grep -v vault test.yml | awk '{$1=$1;print}' | ansible-vault decrypt

Ответ 9

yq извлекает зашифрованное значение var, затем создает временный файл и использует его с 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

Ответ 10

Другой вариант заключается в использовании опции редактирования:

ansible-vault edit test.yml

Затем вам будет предложено ввести пароль, и вы идете.

Ответ 11

если у вас установлен ansible, вы можете расшифровать файл (не строку), используя:

ansible-vault view your_vault_filename.yml

Это запросит у вас пароль, и после аутентификации контент будет отображаться расшифрованным.

источник https://www.digitalocean.com/community/tutorials/how-to-use-vault-to-protect-sensitive-ansible-data-on-ubuntu-16-04