不把密钥写进仓库

安全配置模型与 API Key

理解凭据存储、解析优先级、自定义 Provider 与 OpenAI-compatible 端点的边界。

官方事实适用 0.1.0-rc.59 分钟核验于 2026-08-14

推荐在 Web UI 的「设置 → 模型」中配置。保存后,下一次请求会立即使用新设置,不需要重启服务器。

默认存储位置

DeepSeek API Key 是只写字段:浏览器保存后只会收到脱敏描述符,无法再次取得明文。

默认凭据文件为:

$DSH_HOME/.credentials.yaml

未设置 DSH_HOME 时,它通常位于:

~/.dsh/.credentials.yaml

settings.yaml 只应保存凭据引用,不应保存字面密钥。

环境变量方式

在启动进程环境或仓库根 .env 使用占位值:

DEEPSEEK_API_KEY=your_key_here
DEEPSEEK_BASE_URL=https://your-gateway.example

DEEPSEEK_BASE_URL 可省略;省略时使用公共 API。不要把真实值提交到 Git、粘贴进问题单、截图或终端录屏。

凭据解析优先级

从高到低:

  1. 启动进程继承的环境变量;
  2. $DSH_HOME/.credentials.yaml
  3. 调用目录 .env
  4. $DSH_HOME/.env

如果同一个 Key 在多个位置存在,先确认到底是哪一层生效。

POSIX 文件权限

凭据文件带有 group/other 权限时会被拒绝。可修复为:

chmod 600 ~/.dsh/.credentials.yaml

0600 只能阻止其他 OS 用户;同一 UID 下运行的工具进程仍可能读取它。这是审慎措施,不是完整的密钥隔离边界。

自定义 Provider

自定义提供方至少需要小写且长期稳定的 Provider ID、Base URL、API 协议、凭据和一个模型。「获取可用模型」会请求 OpenAI-compatible 的 GET /models;端点不支持该接口时应手动录入。

Provider ID 会进入请求、Session 与凭据引用,不能无损重命名。要改名,先新建新 Provider,再删除旧项。

证据与修订

一手来源

本页叙事经过压缩;命令、行为与风险边界以以下官方源码或文档为准。