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, 团队协作, 开发工具, 数据加密, 日志审计, 点对点同步, 环境变量管理