Ansible使用Bitwarden存储Vault密码
Bitwarden(Vaultwarden) 提供了命令行版本的客户端, 利用 Ansible 的 vault_password_file
, 我们可以很方便的在使用 ansible-vault
时调用 Bitwarden 里的密码。
配置 bitwarden-cli
这里仅以 macOS 为例,其他的操作系统直接参考官方文档即可: 安装bitwarden-cli|官方文档1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21安装
brew install bitwarden-cli
配置server地址
bw config server https://xxx.xxx
登录
bw login
登录完成后可以查看一下状态
bw status
正常来说, 即使是登录了, `bw` 每次执行可能也都会要求输入主密码, 这时候你可以使用如下命令让当前shell会话免密码:
export BW_SESSION=$(bw unlock --raw)
测试创建一个密码item # 参考 https://bitwarden.com/help/cli/#create
bw get template item | jq ".name=\"Ansible-test-alliot-blog\" | .login=$(bw get template item.login | jq '.username="alliot" | .password="password123"')" | bw encode | bw create item
获取这个密码
bw get password Ansible-test-alliot-blog
配置 Ansible
通过上一步的配置,我们已经可以在终端通过 bw
命令创建和获取密码了, 在 Ansible 这边,我们测试使用 ansible-vault
来加密一个文件,并将密码存储到 Bitwarden, 随后使用 Bitwarden 密码来完成对加密文件的解密。
首先我们在当前项目路径或是家目录创建一个 ansible.cfg
。(具体在哪里创建取决于你想要的作用域, 优先级参考 Ansible官方文档: config) ,我这里直接以家目录为例。 vim ~/.ansible.cfg
内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[defaults]
nocows = 1
host_key_checking = False
inventory = inventory/inventory.ini
ansible_ssh_user = root
interpreter_python = auto_silent
stdout_callback = debug
# 支持脚本执行获得密码 <<<======= 新增这行即可
vault_password_file = ~/vault-pass.sh
[ssh_connection]
pipelining =True
ssh_args=-o ControlMaster=auto -o ControlPersist=60s
在配置文件中, 指定 ~/vault-pass.sh
为 vault_password_file
, 该脚本如下:1
2
3
4
5
6
7
8
9
10
11
12!/bin/bash
set -e
需要先安装bitwarden-cli
brew install bitwarden-cli
bw config server https://xx.xxx
bw login # 登录
bw sync # sync密钥
bw logout # 退出
export BW_SESSION=$(bw unlock --raw)
bw get password "Ansible-test-alliot-blog"
别忘了赋予它可执行权限: chmod +x ~/vault-pass.sh
使用 Ansible-vault
假设我现在有一个文件需要使用 ansible-vault
加密: alliot-blog.yaml
, 我们可以直接使用 ansible-vault
命令行执行:1
2ansible-vault encrypt alliot-blog.yaml
New Vault password:
这是默认 ansible-vault
配置提示的交互式输入加密用的 Vault password, 在我们配置了上述脚本集成 Bitwarden 后,这个命令交互将变成如下:1
2
3ansible-vault encrypt alliot-blog.yaml
? Master password: [input is hidden]
这里交互要求输入的是 Bitwarden 的密码, 完成登录后,将直接调用前面我们在 Bitwarden 中配置的 “Ansible-test-alliot-blog” 作为加密用的 Vault password。
至此, 便实现了 Ansible-vault 调用 Bitwarden 中的密码。
结语
Bitwarden 提供了多平台的客户端, 以及完善的 API, 利用这些开放的接口, 我们可以实现很多集成, 将零散的密码、凭证统一管理。
不过, 享受这种集中化管理带来的便利的同时, 也要防止被 “一锅端”, 别忘了安全加固与备份。