密钥进过对话,不等于对话结束就消失
很多人在新加坡 Mac mini 上常开 Claude Code:MCP、脚本、过夜任务都挂在这台整机上。排障时偶尔会把 API Key、PAT 或临时令牌贴进会话,好让代理立刻帮你测通。
社区里有人提醒:代理一旦读过密钥,明文片段有可能留在 Claude Code 的本机会话日志里(常见落点在用户目录下的 ~/.claude/projects)。你关了窗口、甚至删了聊天记录,磁盘上的项目日志未必同步清干净。
这不是要吓停使用,而是把「密钥生命周期」从「我记得删了聊天」改成「机器上能复查」。本文给出一套可复现的步骤:只读扫描 → 确认命中 → 轮换密钥 → 改掉明文习惯。Claude 账号由你自己开通;机器提供的是稳定合规的使用环境。
第一步:先分清三类「密钥可能出现的地方」
在常开 Mac mini 上,密钥常见落点不止一处:
- 会话 / 项目日志:
~/.claude/projects下按项目或会话拆分的历史,可能含你粘贴过的字符串。 - 配置与 MCP 文件:
~/.claude.json、仓库.mcp.json等;明文 Key 本就不该长期放这里(见钥匙串中介做法)。 - Shell 历史与脚本:
~/.zsh_history、临时.env、一次性 curl 命令。
今天先盯第 1 类——很多人最容易漏的就是「对话里贴过一次」。第 2、3 类扫完日志后顺手做。
第二步:只读摸清本机 Claude 目录
用 SSH 或 UU 远程连接登入新加坡 Mac mini:
whoami
ls -ld ~/.claude ~/.claude/projects 2>/dev/null
du -sh ~/.claude ~/.claude/projects 2>/dev/null
find ~/.claude/projects -maxdepth 3 -type d 2>/dev/null | head -40
记下:projects 是否存在、体积大概多大、有哪些项目目录。体积突然膨胀,往往意味着长会话或多次重试被完整留下。
第三步:扫描疑似密钥形态(只读)
API 类字符串形态很多,先用保守模式找常见前缀,避免误伤:
# 只读:列出含疑似前缀的文件路径(不打印匹配全文到终端历史之外的笔记)
rg -l -e 'sk-[A-Za-z0-9]' -e 'sk-ant-' -e 'ghp_' -e 'github_pat_' -e 'xox[baprs]-' \
~/.claude/projects 2>/dev/null | head -50
若本机没有 rg,可用:
grep -RIl -E 'sk-[A-Za-z0-9]|sk-ant-|ghp_|github_pat_|xox[baprs]-' \
~/.claude/projects 2>/dev/null | head -50
原则:
- 先看路径列表,再按需打开单个文件核对。
- 命中不一定是「仍有效的生产 Key」,也可能是示例、已作废串或截断片段——但只要像真 Key,就按「可能泄露」处理。
- 扫描命令本身会进 Shell 历史;敏感排查可开一次性无历史会话,或事后清理对应 history 行。
第四步:命中之后怎么处理
- 立刻在签发方轮换 / 吊销对应 Key(Anthropic、GitHub、Slack 等控制台以你实际用到的为准)。旧串作废优先于「先删日志」。
- 更新本机注入方式:改用钥匙串中介、短时环境变量,或仅进程可见的注入;不要写回 MCP 明文配置。
- 再决定日志:确认新 Key 可用后,对明确含旧串的会话文件做归档加密或删除;不要在未轮换前只删文件假装没事。
- 复查同机其它落点:
rg -l -e 'sk-[A-Za-z0-9]' -e 'sk-ant-' ~/.claude.json ~/.mcp.json .mcp.json 2>/dev/null
rg -l -e 'sk-[A-Za-z0-9]' -e 'sk-ant-' ~/.zsh_history ~/.bash_history 2>/dev/null | head
第五步:改掉「把 Key 贴进对话」的默认
技术扫描解决存量;习惯解决增量:
- 需要代理调用外部 API 时,优先让工具从钥匙串 / 环境注入取作用域令牌,而不是把完整 Key 贴进提示词。
- 演示用 Key 与生产 Key 分开;演示串也要可吊销。
- 长任务、过夜会话开跑前,确认权限规则不会在无人值守时把密钥写进新文件。
- 团队协作时,不要把「会话导出」当普通日志分享;导出前先跑同上扫描。
一套最小约定可以写成项目内 docs/secrets-hygiene.md(只写流程,不写任何真实密钥)。
第六步:十五分钟验收清单
- [ ]
~/.claude/projects已做一次只读扫描,命中文件有清单 - [ ] 凡像真 Key 的串,已在控制台轮换或确认本就是假示例
- [ ] MCP /
~/.claude.json无长期明文 Key - [ ] Shell 历史抽查无新增明文粘贴
- [ ] 新会话用钥匙串或环境注入跑通一次真实调用
- [ ] 扫描输出与旧 Key 未发到公开聊天或工单
和 Claude Code 怎么拼在一台新加坡 Mac mini 上
推荐顺序:钥匙串中介配好 MCP → 日常禁止把 Key 贴进对话 → 每周(或大排障后)扫一遍 ~/.claude/projects → 命中则先轮换再清理。终端版 Claude Code 适合脚本与 SSH;桌面版利于看 diff。权威运行环境只放一台整机独享的新加坡 Mac mini,会话日志与密钥卫生才能「扫一次覆盖主路径」,避免笔记本、云端虚机、家里另一台电脑各留一份历史。
为什么放在新加坡的常开 Mac mini 上做
- 日志落点集中:会话目录、MCP 配置、Shell 历史都在同一台整机,排查不用在多台设备间猜。
- 整机独享:密钥卫生与会话归档边界清晰;退租抹机时日志与本地凭据一并结束。
- 真 macOS 环境:钥匙串、Claude Code、开发工具链同一套 Darwin,减少「这边扫了、那边还在跑旧配置」。
- 远程可复查:SSH 跑扫描与轮换;需要 GUI 时用 UU 远程连接打开桌面版核对。实际延迟取决于你本地的网络线路。
Zumac.Ai 提供位于新加坡的实体 Mac mini M6,整机独享,支持 SSH 与 UU 远程连接,FileVault 全盘加密,退租时抹机重装。新客户整机租用 ¥999/月起,季付 ¥2,697.30,半年付 6 送 1 为 ¥5,994,年付 12 送 2 为 ¥11,988;已购买客户续费保持原价。新客户首单自审核开通当天起租,续费及老客户新订单自付款当天起租。建议先租一个月,把「扫描会话日志 → 轮换 Key → 钥匙串注入」跑成固定节奏。
小结
- 密钥进过 Claude Code 对话后,检查
~/.claude/projects,不要默认「关窗即消失」。 - 发现疑似串:先轮换,再清理日志与其它落点。
- 增量靠习惯:钥匙串 / 环境注入,禁止把生产 Key 当提示词。
- 把权威环境固定在新加坡常开 Mac mini,密钥卫生才能持续复查。
