解密失败(找不到可以解密的保管库机密)

问题描述 投票:0回答:4

更新:

我已将配置组织到基于角色的目录结构中。其中一些角色具有包含加密文本的默认变量文件。这是一个经过简化且经过测试但失败的任务列表:

---
- name: 'Include some additional variables'
  include_vars:
    dir: "{{playbook_dir}}/roles/foo/defaults/vars"
  tags: 'debug'

- name: 'Debug: display the variables'
  debug:
    msg: "{{item}}"
  with_items:
    - "{{encrypted_text_from_yml_file}}"
  tags: 'debug'

- name: 'Deploy Foo plugins'
  block:
    - name: 'Transfer the folder to the application directory'
      synchronize:
        src: 'some_src_folder'
        dest: "{{some_unencrypted_text_from_another_yml_file}}"
        archive: false
        recursive: true
  tags: 'debug'

但是,在执行我的剧本时,我看到以下错误:

TASK [<some_app> : Transfer the <some_folder> folder to the application directory] **********************************************************************************
fatal: [<some_hostname>]: FAILED! => {"failed": true, "msg": "Decryption failed (no vault secrets would found t
hat could decrypt)"}

正在从密码文件中检索我的凭据。

我在变量包含之后立即抛出了一个调试任务,并显示了所有加密的变量。奇怪的是发生异常的任务块正在使用同步模块。甚至没有使用库中的变量...

知道如何解决这个问题吗?我将详细程度增加到

-vvvv
,但没有看到任何明显的东西。

使用:ansible 2.4.0.0

ansible
4个回答
10
投票

我解决了这个问题。我不小心截断了 group_vars/all 中的加密字符串。使用

-vvvvv
(注意第 5 个 v)实际上有助于揭示 HMAC 问题。


4
投票

就我而言,错误是由特殊字符引起的。解密在我的开发机器(arch linux)上工作,但在我的 ci 机器(Gitlab)上运行时失败。我已将密码作为秘密变量注入,但由于密码包含

$
显然解密不起作用。

通过删除所有特殊字符来更改密码后,使用新密码重新输入保管库和加密字符串的密钥,问题就消失了,ci 可以成功解密保管库。


2
投票

我使用分子测试命令遇到了同样的问题。我尝试使用 --ask-vault-pass 运行剧本,它起作用了,所以我认为问题来自 python 版本或分子,但就我而言,这只是我的Vault-password-file .vault 的名称它列在 .gitignore 文件中。我一改名就很好用了。


0
投票

这是一种边缘情况,但至少在 Ansible Tower 中仍然可能是导致此错误的原因。

如果您已从凭证(菜单)中删除了 play 中使用的凭证,但没有更新 play,Ansible 仍将使用它,因为它尚未从 play 中删除。

© www.soinside.com 2019 - 2024. All rights reserved.