使用 Git 和端到端加密安全同步 Obsidian 笔记
跨设备同步 Obsidian 笔记,同时确保数据隐私,使用 Git 和 git-crypt 工具实现透明加密非常简单。这种方法让你完全掌控笔记数据,无需依赖专有云服务。
搭建环境并创建 GPG 密钥
首先安装所需软件。在 Arch Linux 上运行 sudo pacman -S gnupg git-crypt;在 Debian/Ubuntu 上使用 sudo apt install gnupg git-crypt。然后,设置 GPG 目录权限:
chmod 700 ~/.gnupg
find ~/.gnupg -type f -exec chmod 600 {} \;
find ~/.gnupg -type d -exec chmod 700 {} \;
使用 gpg --full-generate-key 生成非对称密钥。设置时选择:
- 密钥类型:RSA(选项 1)。
- 密钥长度:4096 位。
- 有效期:0(无过期)。
- ID 信息:姓名和邮箱。
- 密码短语:每次解锁仓库必填。
为方便起见,在 ~/.gnupg/gpg-agent.conf 中添加 default-cache-ttl 86400 和 max-cache-ttl 86400 以缓存密码短语 24 小时,然后运行 gpgconf --reload gpg-agent。
使用 git-crypt 初始化仓库
进入笔记文件夹并初始化 Git 仓库:cd ~/notes && git init。使用 git-crypt init 设置加密,然后添加你的 GPG 密钥为受信任:git-crypt add-gpg-user --trusted [email protected]。
正确配置 .gitignore 和 .gitattributes。在 .gitignore 中排除 Obsidian 临时和系统文件:
.obsidian/workspace.json
.obsidian/workspace-mobile.json
.obsidian/cache
.trash/
在 .gitattributes 中指定 git-crypt 加密的文件:
.gitattributes !filter !diff
.gitignore !filter !diff
*.md filter=git-crypt diff=git-crypt
*.canvas filter=git-crypt diff=git-crypt
*.png filter=git-crypt diff=git-crypt
*.jpg filter=git-crypt diff=git-crypt
*.jpeg filter=git-crypt diff=git-crypt
*.pdf filter=git-crypt diff=git-crypt
提交顺序很重要:先提交 .gitattributes,再提交其他内容,避免推送未加密数据。
git add .gitattributes
git commit -m "$(date '+%Y-%m-%d %H:%M')"
git add .
git commit -m "$(date '+%Y-%m-%d %H:%M')"
使用 git-crypt status | grep WARNING 检查加密状态。设置远程仓库并推送。
与 Obsidian 集成并自动化
通过 Obsidian 设置安装 Obsidian Git 插件(作者 Vinzent),支持从界面或定时执行拉取、提交和推送操作。关键规则:在终端运行 git-crypt unlock 解锁仓库后再启动 Obsidian,否则笔记会显示二进制乱码,插件可能推送错误提交。
使用 pre-commit 钩子提升安全性,阻止推送未加密文件。创建可执行文件 .githooks/pre-commit:
#!/bin/bash
for file in $(git diff --cached --name-only); do
if git check-attr filter "$file" | grep -q "git-crypt"; then
string=$(git show ":$file" 2>/dev/null | head -c 9)
if [ "$string" != $'\x00GITCRYPT' ]; then
echo "file '$file' is not encrypted and be careful"
exit 1
fi
fi
done
exit 0
告知 Git 使用它:git config core.hooksPath .githooks。
迁移与备份
迁移到新设备时,导出私钥:gpg --export-secret-keys --armor [email protected] > ~/key.asc。安全传输(如 scp),导入 gpg --import,克隆仓库并运行 git-crypt unlock。传输后从两设备删除密钥文件。将 GPG 密钥备份到密码管理器等安全位置——没有密钥和密码短语,笔记将无法访问。
备选方案:对称加密
如果 GPG 过于复杂,使用 git-crypt 的对称密钥。导出密钥 git-crypt export-key ~/key.bin,转为 base64 存储:base64 -i ~/key.bin。将字符串存入密码管理器。在另一设备解码解锁:echo "base64 string" | base64 -d > key.bin && git-crypt unlock key.bin。注意:安全性较低——密钥无额外密码保护,一旦泄露数据即暴露。
主要优势
- 完全数据掌控:笔记存储在 Git 仓库中,使用 AES-256 端到端加密。
- 无缝工作流:通过 Git 过滤器自动加密/解密——你编辑的是纯 Markdown 文件。
- 跨平台支持:适用于 Linux、macOS 和 Windows(通过 WSL 或原生 Git)。
- 自动同步:Obsidian Git 插件处理定时提交和推送。
- 额外防护:pre-commit 钩子防止意外推送未加密文件。
— Editorial Team
暂无评论。