zain-23/local-vault

GitHub: zain-23/local-vault

一款无云纯 P2P 的加密密钥同步工具,帮助开发团队在多台机器间安全共享和管理 .env 敏感配置。

Stars: 8 | Forks: 0


# 🔐 LocalVault **为开发团队提供的加密密钥同步。** **无云。无泄漏。纯 P2P。**
## 安装 预构建的二进制文件发布在 [GitHub Releases](https://github.com/zain-23/local-vault/releases),支持 Linux、macOS 和 Windows。 **Linux / macOS** — 下载正确的压缩包,解压并安装: ``` # 选择你的平台:linux_amd64 · linux_arm64 · darwin_amd64 · darwin_arm64 curl -fsSL https://github.com/zain-23/local-vault/releases/latest/download/lv_linux_amd64.tar.gz \ | tar -xz lv sudo mv lv /usr/local/bin/lv ``` **Windows** — 从 [最新版本](https://github.com/zain-23/local-vault/releases/latest) 下载 `lv_windows_amd64.zip`,解压并将 `lv.exe` 添加到你的 `PATH` 中。 **使用 Go** ``` go install github.com/zain-23/local-vault@latest ``` **从源码构建** ``` git clone https://github.com/zain-23/local-vault cd local-vault go build -o lv ./apps/cli # 或者:task cli:build sudo mv lv /usr/local/bin/lv ``` ## 快速开始 ``` # 在你的项目中初始化 vault cd my-project lv init # 每天解锁一次 — 此后无需提示 lv unlock # 添加 secrets lv add DATABASE_URL=postgres://localhost/mydb lv add API_KEY=sk-live-xxx lv add STRIPE_KEY=sk_live_xxx --env production lv add STRIPE_KEY=sk_test_xxx --env development # 运行你的项目并注入 secrets lv inject -- npm run dev # 导入现有的 .env 文件 lv import .env.local ``` ## 会话管理 LocalVault **每天**仅要求输入一次你的密码。此后,每个命令都无需任何提示即可工作——就像 SSH agent 一样。 ``` # 解锁一次 lv unlock # ✅ 已解锁 12 小时 # 所有命令静默运行 lv list lv add KEY=value lv push lv sync # 完成后锁定 lv lock # 一次性锁定所有项目 lv lock --all ``` ## 团队同步 ``` # ── Dev A ────────────────────────────────────────── lv invite # ⏳ 正在等待队友加入... # 🎉 队友已加入! # 现在运行:lv push lv push # ✅ 已发送到 ahmed-laptop # ── Dev B ────────────────────────────────────────── lv join LV-A3F9-X2K1 # ✅ 已连接到 peer lv sync # ✅ 已接收 3 个 secret(s) lv inject -- npm run dev # ✅ all secrets loaded ``` **在任何地方都能工作。** 不同的办公室、不同的城市、不同的网络——信令服务器安全地桥接各个 peer。如果开发者 B 在开发者 A push 时处于离线状态,消息将被存储 48 小时,并在他们上线时送达。 ## 密钥轮换 ``` # 轮换单个 key lv rotate API_KEY # 新值:•••••••• # ✅ API_KEY 已轮换 # 📤 已通知所有 peers # 轮换多个 keys lv rotate API_KEY STRIPE_KEY DATABASE_URL # 在编辑器中打开所有 secrets — 仅更改你想要更改的内容 lv rotate --all # 轮换特定环境 lv rotate --all --env production ``` ## Peer 管理 ``` # 查看谁拥有访问权限 lv peers # 👥 受信任的 Peers # Peer 1 — ahmed-laptop (b427d8d8...) # Peer 2 — sara-macbook (c891f2a1...) # 移除 peer lv revoke b427d8d8-8b7f-4605-9b5a-f8be956b168d # ✅ 已撤销对 ahmed-laptop 的访问权限 # 在撤销后进行轮换,以使缓存的副本失效 lv rotate --all ``` ## 安全性 ``` Passphrase → Argon2id → AES-256-GCM → vault.json.enc ``` ``` X25519 Key Exchange → Shared Secret → AES-256-GCM → Encrypted blob ``` | 层级 | 算法 | | ---------------- | ----------- | | Vault 加密 | AES-256-GCM | | 密钥派生 | Argon2id | | Peer 密钥交换 | X25519 ECDH | | 设备身份 | Ed25519 | | 会话缓存 | OS Keychain | **信令服务器能看到的内容:** - 加密的 blob —— 无法读取 - 随机的设备 ID —— 与身份无关 - IP 地址 —— 仅用于 peer 发现 **绝不以未加密形式离开你机器的内容:** - 你的密钥 - 你的密码 - 你的私钥 ## 所有命令 | 命令 | 描述 | | ----------------------------------- | ---------------------------- | | `lv init` | 初始化加密 vault | | `lv unlock` | 解锁 12 小时 | | `lv lock` | 锁定当前项目 | | `lv lock --all` | 锁定所有项目 | | `lv add KEY=VALUE` | 添加或更新密钥 | | `lv add KEY=VALUE --env production` | 添加到特定环境 | | `lv get KEY` | 获取密钥的值 | | `lv list` | 列出所有密钥 | | `lv list --env staging` | 按环境过滤 | | `lv remove KEY` | 删除密钥 | | `lv import FILE` | 从 `.env` 文件导入 | | `lv inject -- CMD` | 携带密钥运行命令 | | `lv inject --env production -- CMD` | 携带环境密钥运行 | | `lv invite` | 生成队友邀请码 | | `lv join CODE` | 加入队友的 vault | | `lv push` | 将密钥 push 给所有 peer | | `lv sync` | 从 peer 拉取密钥 | | `lv peers` | 列出受信任的 peer | | `lv rotate KEY` | 轮换密钥 | | `lv rotate --all` | 在编辑器中轮换所有密钥 | | `lv revoke DEVICE_ID` | 移除 peer 访问权限 | | `lv status` | 显示 vault 健康状态 | | `lv log` | 显示审计追踪 | | `lv whoami` | 显示设备身份 | ## Next.js ``` lv import .env.local --env development lv import .env.production --env production ``` ``` { "scripts": { "dev": "lv inject --env development -- next dev", "build": "lv inject --env production -- next build", "start": "lv inject --env production -- next start" } } ``` 你的应用代码保持完全不变 —— `process.env.KEY` 会像往常一样工作。 ## Monorepo 开发 本仓库是一个 pnpm + Turborepo monorepo,其中 Go 应用通过 [Task](https://taskfile.dev) 进行编排: ``` apps/cli Go CLI (`lv`) apps/server Go API + worker apps/web React web app packages/ Shared TypeScript packages ``` ``` pnpm install # JS workspaces pnpm dev # web (Turbo) pnpm build # all JS packages pnpm lint / test # JS lint & tests task cli:build # build lv task server:run # run API task test:go # go test ./... task docker:server # Docker image for API ``` 需要 [pnpm](https://pnpm.io)、[Go](https://go.dev),以及可选的 [Task](https://taskfile.dev)。 ## 提交到 Git 的内容 ``` .lv/identity.pub ✅ safe to commit .lv/vault.json.enc ❌ gitignored automatically .lv/identity.key ❌ gitignored automatically .lv/identity.json ❌ gitignored automatically ```

_停止通过 Slack 共享密钥。_ [报告 Bug](https://github.com/zain-23/local-vault/issues) · [请求功能](https://github.com/zain-23/local-vault/issues)
标签:EVTX分析, SOC Prime, 团队协作, 开发工具, 数据加密, 日志审计, 点对点同步, 环境变量管理