本周继续改造个人基础设施仓库,探讨如何在之前使用ansible-vault的方法之外保持秘密的保密性。
过去 7 年多基于 Ansible 的解决方案运行良好,但在进行大型仓库编辑时,有一个不好的习惯,就是会留下未加密的文件并提交到 Github。注意我的基础设施仓库的笑话计数器是“少泄漏 99.7%的凭证”,这意味着我已经泄漏了 3 次。
引入git-crypt,它为用户提供了透明加密。选择的文件在提交时会被加密,检出时会被解密。它允许混合明文和加密内容,并通过经过考验的GPG 密钥系统允许协作。
提供了一个示例仓库ironicbadger/gctest供查看、分叉等。
GPG 密钥基础知识
GPG 密钥对包含公钥和私钥。私钥是非常重要的秘密,应小心保管。
创建 GPG 密钥:
gpg --full-gen-key
# 1) RSA 和 RSA
# 密钥大小(默认 3072)- 4096
# 密钥有效期- 由你决定
# GnuPG 需要构建一个用户 ID 来标识你的密钥
# 适当完成提示
# 满意选择后,按 O(确定)创建密钥对
验证系统已知的密钥现在包含新创建的密钥:
gpg --list-keys
# /Users/bob/.gnupg/pubring.kbx
------------------------------
pub rsa4096/0xEB4F8DBF8DBF8DB3 2024-12-27 [SC]
Key fingerprint = F8DB F8DB F8DB F8DB F8DB F8DB F8DB F8DB F8DB 1463
uid [ultimate] bob <[email protected]>
sub rsa4096/0xF8DBF8DB07C2F8DB 2024-12-27 [E]
git-crypt 基础知识
需要安装 git-crypt,完整安装说明可通过git-crypt GitHub 仓库获取。安装完成后继续以下操作。
进入 git 仓库目录,确保在主/主分支,无未提交更改,初始化 git-crypt 并添加密钥到仓库,例如:
$ cd gctest
$ git-crypt init
$ git-crypt add-gpg-user [email protected]
git-crypt 已提交更改(.git-crypt 目录中的一个新.gpg 文件),现在执行:
$ git push
git-crypt 加密说明
选择加密的文件由.gitattributes
文件的内容控制。
以下示例文件将自动加密文件名中包含.enc
的任何文件,如secrets.enc
或secrets.enc.yaml
,它们都会以加密形式提交到 Github 且对你透明。
.gitattributes!filter!diff
**/*.enc.* filter=git-crypt diff=git-crypt
**/*.enc/** filter=git-crypt diff=git-crypt
提交.gitattributes
文件,然后创建一个符合选择的加密过滤器模式(我的情况是.enc
)的文件。
一开始可能会怀疑 git-crypt 是否在起作用,但提交并推送.enc
文件后,它将自动加密,只有拥有你的 PGP 密钥的人才能查看(希望只有你!),还需要输入密码短语,也要保管好。
可以使用git-crypt lock
在本地磁盘上保持文件内容加密。
如果要在多个机器上访问此 git 仓库,需要复制 GPG 密钥,或在仓库中添加 GPG 身份。如果复制密钥,使用:
$ gpg --export-secret-key -a > secretkey.asc
然后将文件复制到需要的地方,并在另一端导入:
$ gpg --import secretkey.asc
完成后安全删除密钥文件:
$ shred secretkey.asc
$ rm secretkey.asc
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。