返回首页

安全的 Obsidian 同步:Git 和加密

详细指南:使用 Git 和 git-crypt 工具在 Obsidian 中设置安全的笔记同步,实现端到端加密。本文涵盖创建 GPG 密钥、初始化仓库、与 Obsidian Git 插件集成、设置 pre-commit 钩子以及备份方法。

如何使用加密同步 Obsidian:完整指南
Advertisement 728x90

使用 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 生成非对称密钥。设置时选择:

Google AdInline article slot
  • 密钥类型:RSA(选项 1)。
  • 密钥长度:4096 位。
  • 有效期:0(无过期)。
  • ID 信息:姓名和邮箱。
  • 密码短语:每次解锁仓库必填。

为方便起见,在 ~/.gnupg/gpg-agent.conf 中添加 default-cache-ttl 86400max-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 临时和系统文件:

Google AdInline article slot
.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 检查加密状态。设置远程仓库并推送。

Google AdInline article slot

与 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

Advertisement 728x90

继续阅读