Credential Manager

将分散的API密钥集中到安全的.env文件中,确保权限与Git忽略配置。

已扫描安全风险
适合谁
OpenClaw平台开发者、需要集中管理密钥的自动化系统维护者
不适合谁
无需管理密钥的普通用户、不使用OpenClaw环境的人员
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @callmedas69/credential-manager

Skill 说明

命令、参数、文件名以原文为准

凭证管理器

状态:强制性安全基础

将分散的 API 密钥和其他凭证集中到一个安全的 .env 文件中。

⚠️ 此操作不可忽略

集中式 .env 凭证管理是 OpenClaw 安全性的核心要求。如果您的凭证分散在多个文件中,请立即停止并进行整合。

规则: 所有凭证**必须仅存在于 ~/.openclaw/.env** 中。不得在工作区、技能目录或脚本目录中存放。

参考:

  • [CORE-PRINCIPLE.md](CORE-PRINCIPLE.md) - 为何此规则不可妥协
  • [CONSOLIDATION-RULE.md](CONSOLIDATION-RULE.md) - 单一来源原则

基础要求

每个 OpenClaw 部署都必须具备:

~/.openclaw/.env (权限模式 600)

这是所有凭证的唯一可信来源。无一例外。

原因:

  • 单一位置 = 更容易保护
  • 权限模式 600 = 仅用户可读
  • Git 忽略 = 不会意外提交
  • 格式验证 = 可发现错误
  • 审计日志 = 知道发生了哪些更改

分散的凭证 = 分散的攻击面。此技能解决该问题。

本技能功能

  1. 扫描常见位置中的凭证
  2. 备份现有凭证文件(带时间戳)
  3. 整合~/.openclaw/.env
  4. 设置权限以确保安全(600)
  5. 验证安全性与格式
  6. 强制执行最佳实践
  7. 清理迁移后的旧文件

检测参数

该技能通过扫描自动识别凭证,包括:

文件模式:

  • 配置目录中的 credentials.json 文件
  • .env 文件
  • 文件名包含 -credscredentials 的内存文件

敏感密钥模式:

  • API 密钥、访问令牌、承载令牌
  • 密码、口令、助记词
  • OAuth 消费者密钥
  • 私钥、签名密钥、钱包密钥
  • 助记词和种子短语

安全检查:

  • 文件权限(必须为 600
  • Git 忽略保护
  • 格式验证

快速开始

完整迁移(推荐)

# 扫描凭证
./scripts/scan.py

# 审查并整合
./scripts/consolidate.py

# 验证安全性
./scripts/validate.py

单独操作

# 仅扫描
./scripts/scan.py

# 整合特定服务
./scripts/consolidate.py --service x

# 备份但不删除
./scripts/consolidate.py --backup-only

# 清理旧文件
./scripts/cleanup.py --confirm

常见凭证位置

该技能会扫描以下路径:

~/.config/*/credentials.json
~/.openclaw/workspace/memory/*-creds.json
~/.openclaw/workspace/memory/*credentials*.json
~/.env (若存在则合并)

安全特性

文件权限:.env 设置为 600 模式(仅所有者可读)

Git 保护: 创建或更新 .gitignore

备份机制: 修改前生成带时间戳的备份

验证功能: 检查格式、权限及重复项

模板支持: 创建 .env.example(可安全共享)

输出结构

迁移完成后:

~/.openclaw/
├── .env                     # 所有凭证(已加密)
├── .env.example             # 模板文件(可共享)
├── .gitignore               # 保护 .env 文件
├── CREDENTIALS.md           # 文档说明
└── backups/
    └── credentials-old-YYYYMMDD/  # 旧文件备份

支持的服务

系统自动检测以下常见服务:

  • X(Twitter): OAuth 1.0a 凭证
  • Molten: 代理意图匹配
  • Moltbook: 代理社交网络
  • Botchan/4claw: 网络协议
  • OpenAI、Anthropic、Google: 人工智能服务提供商
  • GitHub、GitLab: 代码托管平台
  • 通用: API_KEY*_TOKEN*_SECRET 等模式

完整列表请参阅 [references/supported-services.md](references/supported-services.md)

安全最佳实践

详细安全指南请参阅 [references/security.md](references/security.md)

快速检查清单:

  • .env 文件权限为 600
  • .env 被 Git 忽略
  • ✅ 代码或日志中无凭证
  • ✅ 定期轮换密钥
  • ✅ 每个环境使用独立密钥

脚本说明

所有脚本均支持 --help 查看详细用法。

scan.py

# 扫描并输出报告
./scripts/scan.py

# 包含自定义路径
./scripts/scan.py --paths ~/.myapp/config ~/.local/share/creds

# JSON 格式输出
./scripts/scan.py --format json

consolidate.py

# 交互模式(修改前提示确认)
./scripts/consolidate.py

# 自动确认(无提示)
./scripts/consolidate.py --yes

# 仅备份
./scripts/consolidate.py --backup-only

# 特定服务
./scripts/consolidate.py --service molten

validate.py

# 全面验证
./scripts/validate.py

# 仅检查权限
./scripts/validate.py --check permissions

# 自动修复问题
./scripts/validate.py --fix

cleanup.py

# 干运行(显示将被删除的内容)
./scripts/cleanup.py

# 实际删除旧文件
./scripts/cleanup.py --confirm

# 保留备份
./scripts/cleanup.py --confirm --keep-backups

迁移流程

步骤 1:发现

./scripts/scan.py

查看输出,了解将被迁移的内容。

步骤 2:备份与整合

./scripts/consolidate.py

创建备份,生成 .env,设置权限。

步骤 3:验证

./scripts/validate.py

确保所有内容安全且正确。

步骤 4:测试

使用新的 .env 文件测试应用程序或技能。

步骤 5:清理

./scripts/cleanup.py --confirm

删除旧的凭证文件(备份文件保留)。

对技能开发者:强制执行此标准

其他 OpenClaw 技能在使用凭证前必须验证其安全性:

Python 技能

#!/usr/bin/env python3
import sys
from pathlib import Path

# 将凭证管理器脚本路径加入搜索路径
sys.path.insert(0, str(Path.home() / '.openclaw/skills/credential-manager/scripts'))

# 强制校验安全的 .env(不符合则退出)
from enforce import require_secure_env, get_credential

require_secure_env()

# 现在可安全加载凭证
api_key = get_credential('SERVICE_API_KEY')

Bash 技能

#!/usr/bin/env bash
set -euo pipefail

# 验证 .env 文件是否存在且安全
if ! python3 ~/.openclaw/skills/credential-manager/scripts/enforce.py; then
    exit 1
fi

# 确保安全后加载
source ~/.openclaw/.env

该机制实现快速失败: 若凭证未正确保护,技能将拒绝运行。用户必须先修复问题才能继续。

加载凭证

迁移完成后,从 .env 文件加载:

Python

import os
from pathlib import Path

# 加载 .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

# 使用凭证
api_key = os.getenv('SERVICE_API_KEY')

Bash

# 加载 .env 文件
set -a
source ~/.openclaw/.env
set +a

# 使用凭证
echo "$SERVICE_API_KEY"

使用现有加载器

若通过 OpenClaw 脚本完成迁移:

from load_credentials import get_credentials
creds = get_credentials('x')

添加新凭证

编辑 ~/.openclaw/.env 文件:

# 添加新服务
NEW_SERVICE_API_KEY=your_key_here
NEW_SERVICE_SECRET=your_secret_here

同时更新模板文件:

# 编辑 .env.example
NEW_SERVICE_API_KEY=your_key_here
NEW_SERVICE_SECRET=your_secret_here

回滚操作

如遇问题可进行回滚:

# 查看备份文件
ls -la ~/.openclaw/backups/

# 恢复特定文件
cp ~/.openclaw/backups/credentials-old-YYYYMMDD/x-credentials.json.bak \
   ~/.config/x/credentials.json

注意事项

  • 默认非破坏性: 删除前会自动备份原始文件
  • 幂等性: 可多次安全运行
  • 可扩展: 可在脚本中添加自定义凭证模式
  • 安全性: 不记录完整凭证内容,仅记录元数据
C
@callmedas69

已收录 1 个 Skill

相关推荐