跳到正文
MyDSH我的 DSH 实战笔记
English
独立维护,非DeepSeek官方;与mydsh.dev等其他MyDSH站点无关联。

首页/模型、权限与安全/API Key与凭证

Key 误提交到仓库后的应急清单

刚发现 key 出现在提交历史里,或者被推到公开仓库了。

已核验版本与环境核验日期2026-11-14
适用范围
任何把key写进文件的场景
核验日期
2026-11-14

可复制指令

git log --all -p -S 'sk-' --oneline | head
顺序很重要:先作废,再清理。反过来的话,清理要花半小时,这半小时里key一直是有效的。

第一步:立刻作废(两分钟)

  1. 去网关控制台把该key禁用或删掉。
  2. 签发新key。
  3. 新key只放进环境变量或密钥管理,不要落到文件里。

先做这三步,再处理仓库。别人扫到泄露key到实际滥用之间,往往就是几十分钟的窗口。

第二步:清历史,不只是删当前文件

把当前文件里的那行删掉、再提交一次,key仍然在历史里。任何人clone下来 git log -p 都能看到。要清的是历史:

git log --all -p -S 'sk-' --oneline | head       # 先确认哪些提交里有
git filter-repo --path-glob '*.yaml' --invert-paths  # 或者用 filter-repo 定向重写

重写历史会影响所有协作者,必须提前通知。操作前先做一次完整镜像备份。

第三步:假设它已经泄露

即使仓库是私有的,也要按已泄露处理。理由很直接:克隆过的每个人本地都有那份历史,你无法收回。作废是唯一可靠的止损。

第四步:查有没有被用过

  • 看网关侧的用量曲线,找异常峰值。
  • 看该key的调用来源IP(如果网关记录)。
  • 有异常就按安全事件处理,不只是换个key。

第五步:防止下一次

  • 在仓库里加pre-commit钩子,扫 sk- 这类前缀。
  • 把配置模板与实际凭据分开:仓库里只放模板,值靠环境变量注入。
  • 把 .credentials.yaml 加进 .gitignore——它不是普通的配置文件,是钥匙。

怎么算跑通

照着逐条对,全过才算完成。有一条没过,先解决它再往下。

  • 旧key在网关侧已失效(用它发请求应当失败)
  • 新key没有出现在任何提交里
  • 历史里用 -S搜索已经搜不到该前缀
  • 协作者都已同步拉取新的历史

会失败在哪

现象 / 原因 / 怎么办,按实际踩到的顺序写。

现象原因怎么办
删了文件但历史里还有只改了工作区,没改提交历史用filter-repo重写历史;确认前后都做过备份
仓库是私有的,觉得不用处理克隆过的人本地都有副本照样作废并轮换,私有只降低概率不改变事实

来源

标「已核验」的,来自本站实跑;标「公开资料整理」的,逐条附出处。