Credential Manager
凭据管理器
状态:强制性安全基础
将分散的API密钥和凭据整合到一个安全的、集中的.env文件中。
⚠️ 这不是可选项
集中化的.env凭据管理是OpenClaw安全性的核心要求。如果你的凭据分散在多个文件中,请立即停止并整合它们。
规则:所有凭据必须且仅能放在~/.openclaw/.env文件中。不能放在工作区、技能或脚本目录中。
参见:
- CORE-PRINCIPLE.md- 为何此事不容妥协
- CONSOLIDATION-RULE.md- 单一来源原则
基础
每个OpenClaw部署都必须具备:
~/.openclaw/.env (mode 600)
这是您所有凭据的唯一真实来源。没有例外。
为什么?
- 单一位置 = 更易于保护
- 文件模式600 = 只有您能读取
- Git忽略 = 不会意外提交
- 验证格式 = 捕捉错误
- 审计跟踪 = 了解变更内容
分散的凭据 = 分散的攻击面。此技能解决了这个问题。
此技能的作用
- 扫描常见位置的凭据
- 备份现有凭据文件(带时间戳)
- 整合到
~/.openclaw/.env - 保护以适当权限(600)
- 验证安全性和格式
- 强制执行最佳实践
- 清理迁移后的旧文件
检测参数
该技能通过扫描以下内容自动检测凭据:
文件模式:
credentials.json配置目录中的文件.env文件- 名称中包含
-creds或credentials的内存文件
敏感密钥模式:
- API密钥、访问令牌、承载令牌
- 密钥、密码、口令
- OAuth消费者密钥
- 私钥、签名密钥、钱包密钥
- 助记词和种子短语
安全检查:
- 文件权限(必须为
600Git-ignore 保护 - 格式验证
- 快速开始
完整迁移(推荐)
单独操作
# Scan for credentials
./scripts/scan.py
# Review and consolidate
./scripts/consolidate.py
# Validate security
./scripts/validate.py
常见凭证位置
# Scan only
./scripts/scan.py
# Consolidate specific service
./scripts/consolidate.py --service x
# Backup without removing
./scripts/consolidate.py --backup-only
# Clean up old files
./scripts/cleanup.py --confirm
该技能会扫描以下位置:
安全功能
~/.config/*/credentials.json
~/.openclaw/workspace/memory/*-creds.json
~/.openclaw/workspace/memory/*credentials*.json
~/.env (if exists, merges)
✅
文件权限:将.env文件权限设置为 600(仅所有者可读写)
✅Git 保护:创建/更新.gitignore文件
✅备份:更改前创建带时间戳的备份
✅验证:检查格式、权限和重复项
✅模板:创建.env.example.env.example(可安全分享)
输出结构
迁移后:
~/.openclaw/
├── .env # All credentials (secure)
├── .env.example # Template (safe)
├── .gitignore # Protects .env
├── CREDENTIALS.md # Documentation
└── backups/
└── credentials-old-YYYYMMDD/ # Backup of old files
支持的服务
自动检测的常见服务:
- X(Twitter):OAuth 1.0a 凭证
- Molten:智能体意图匹配
- Moltbook:智能体社交网络
- Botchan/4claw:网络协议
- OpenAI、Anthropic、Google:AI 服务提供商
- GitHub、GitLab:代码托管平台
- 通用模式:
API_KEY、*_TOKEN、*_SECRET等模式
参见references/supported-services.md查看完整列表。
安全最佳实践
请参阅references/security.md获取详细的安全指南。
快速检查清单:
- ✅
.env文件权限为 600 - ✅
.env文件已被 Git 忽略 - ✅ 代码或日志中不包含凭据
- ✅ 定期轮换密钥
- ✅ 为不同环境使用独立的密钥
脚本
所有脚本均支持--help参数以获取详细用法。
scan.py
# Scan and report
./scripts/scan.py
# Include custom paths
./scripts/scan.py --paths ~/.myapp/config ~/.local/share/creds
# JSON output
./scripts/scan.py --format json
consolidate.py
# Interactive mode (prompts before changes)
./scripts/consolidate.py
# Auto-confirm (no prompts)
./scripts/consolidate.py --yes
# Backup only
./scripts/consolidate.py --backup-only
# Specific service
./scripts/consolidate.py --service molten
validate.py
# Full validation
./scripts/validate.py
# Check permissions only
./scripts/validate.py --check permissions
# Fix issues automatically
./scripts/validate.py --fix
cleanup.py
# Dry run (shows what would be deleted)
./scripts/cleanup.py
# Actually delete old files
./scripts/cleanup.py --confirm
# Keep backups
./scripts/cleanup.py --confirm --keep-backups
迁移工作流
第一步:发现
./scripts/scan.py
查看输出以了解将迁移哪些内容。
第二步:备份与整合
./scripts/consolidate.py
创建备份,构建.env文件,设置权限。
第三步:验证
./scripts/validate.py
确保一切安全且正确。
第四步:测试使用新的.env文件测试您的应用程序/技能。
第五步:清理
./scripts/cleanup.py --confirm
移除旧的凭据文件(备份保留)。
致技能开发者:强制执行此标准
其他 OpenClaw 技能在使用凭据前必须验证其安全性:
Python 技能
#!/usr/bin/env python3
import sys
from pathlib import Path
# Add credential-manager scripts to path
sys.path.insert(0, str(Path.home() / '.openclaw/skills/credential-manager/scripts'))
# Enforce secure .env (exits if not compliant)
from enforce import require_secure_env, get_credential
require_secure_env()
# Now safe to load credentials
api_key = get_credential('SERVICE_API_KEY')
Bash 技能
#!/usr/bin/env bash
set -euo pipefail
# Validate .env exists and is secure
if ! python3 ~/.openclaw/skills/credential-manager/scripts/enforce.py; then
exit 1
fi
# Now safe to load
source ~/.openclaw/.env
这将创建一个快速失败系统:如果凭据未得到适当保护,技能将拒绝运行。用户将被迫修复此问题。
加载凭据
迁移后,从.env加载:
Python
import os
from pathlib import Path
# Load .env
env_file = Path.home() / '.openclaw' / '.env'
with open(env_file) as f:
for line in f:
if '=' in line and not line.strip().startswith('#'):
key, val = line.strip().split('=', 1)
os.environ[key] = val
# Use credentials
api_key = os.getenv('SERVICE_API_KEY')
Bash
# Load .env
set -a
source ~/.openclaw/.env
set +a
# Use credentials
echo "$SERVICE_API_KEY"
使用现有加载器
如果您使用OpenClaw脚本迁移:
from load_credentials import get_credentials
creds = get_credentials('x')
添加新凭据
编辑~/.openclaw/.env:
# Add new service
NEW_SERVICE_API_KEY=your_key_here
NEW_SERVICE_SECRET=your_secret_here
同时更新模板:
# Edit .env.example
NEW_SERVICE_API_KEY=your_key_here
NEW_SERVICE_SECRET=your_secret_here
回滚
如果出现问题:
# Find your backup
ls -la ~/.openclaw/backups/
# Restore specific file
cp ~/.openclaw/backups/credentials-old-YYYYMMDD/x-credentials.json.bak \
~/.config/x/credentials.json
注意事项
- 默认非破坏性:原始文件在移除前已备份
- 幂等性:可安全多次运行
- 可扩展:在脚本中添加自定义凭据模式
- 安全:绝不记录完整凭据,仅记录元数据


微信扫一扫,打赏作者吧~