首页/文章/项目在 iCloud 里?Claude Code 扫出明文 API Key:放到新加坡 Mac mini 并关掉桌面文稿同步

项目在 iCloud 里?Claude Code 扫出明文 API Key:放到新加坡 Mac mini 并关掉桌面文稿同步

· Zumac.Ai

只读安全检查,却扫出一堆明文 Key

有人让 Claude Code 对项目做一次只读安全检查,本意是看看有没有把密钥提交进仓库。结果更扎眼:大量 API Key、令牌写在 .env、.mcp.json、本地配置里——而整个项目文件夹,就在 iCloud Drive 同步范围内。

也就是说:你以为密钥只在本机磁盘上,其实同一份明文已经跟着「桌面 / 文稿 / iCloud 目录」进了云端副本。笔记本丢了、账号被登过一次、同步冲突多出一份旧文件——暴露面都比「只在本机」大。

昨天我们写过另一条路径:会话日志里可能留下读过的 Key。那篇盯的是 ~/.claude/projects 这类会话记录;本文盯的是项目文件本身被 iCloud Drive 同步。两条都要管,不要扫完日志就以为云端副本也干净了。

Claude 账号由你自己开通和管理;机器只提供稳定合规的使用环境。下面步骤可复现,但不能替代你自己的安全审计与密钥轮换。

为什么个人 Mac 特别容易踩坑

macOS 默认常把「桌面」和「文稿」纳入 iCloud。很多人图省事,把代码仓库直接放在:

  • ~/Desktop/projects/...
  • ~/Documents/dev/...
  • 或显式放在 ~/Library/Mobile Documents/com~apple~CloudDocs/...

Claude Code 的工作区一旦落在这些路径下,.env、.mcp.json、临时凭证文件、甚至某些工具写出的本地密钥缓存,都会进入同步队列。云端有副本、多台设备也会再下一份。

常见误判:

  1. 「我没开 iCloud Drive」——其实只关了部分选项,桌面/文稿同步仍开着。
  2. 「仓库有 .gitignore」——gitignore 只管 Git,不管 iCloud。
  3. 「密钥只在本机」——访达里文件旁的云图标,说明同步状态未必是「仅本机」。

目标形态:代理工作区不进云同步

更稳的日常形态是:

  1. Claude Code / Agent 工作区放在一台常开、用途单一的新加坡 Mac mini 上(整机独享),路径选本地目录,例如 ~/work/,不要放进桌面、文稿或 iCloud Drive。
  2. 该机器上关闭「桌面与文稿」的 iCloud 同步(至少对你放工作区的账号如此);需要备份用时间机器或远端 Git,而不是靠 iCloud 同步含密钥的目录。
  3. 明文密钥迁出文件:钥匙串、仅进程可见的环境注入、或你现有的密钥管理方式;.env 只留占位或本地未同步模板。
  4. 发现过的 Key 一律轮换,再谈删文件。

主力笔记本继续日常办公;连过去用 SSH 看终端,需要桌面时用 UU 远程连接。

第一步:在本机先确认谁在同步

在你现在跑 Claude Code 的那台 Mac 上(排查用),先看工作区是否落在同步路径:

# 当前项目是否在桌面 / 文稿 / iCloud 下
pwd
ls -ld ~/Desktop ~/Documents 2>/dev/null
# 若项目在 iCloud Drive 可见路径下,常见会经过 CloudDocs
df -h . | head -5

系统设置里核对:

  1. 打开「系统设置 → Apple ID(或 Apple 账户)→ iCloud → iCloud Drive」。
  2. 查看是否启用了「桌面与文稿文件夹」。
  3. 若工作区在桌面/文稿下,先不要继续往里写新密钥;准备迁移到非同步路径。
关掉同步前先确认:重要且无密钥的文档你另有备份。关掉「桌面与文稿」后,本机桌面/文稿不再自动进 iCloud;已在云端的副本仍可能存在一段时间,敏感文件要按「已暴露」处理。

第二步:把工作区迁到新加坡 Mac mini 的本地目录

在新加坡 Mac mini 上建本地工作根目录(示例):

mkdir -p ~/work
# 不要用 ~/Desktop 或 ~/Documents 当 Agent 根目录
cd ~/work

用 SSH 或 UU 远程连接登入后:

  1. 用 git clone 拉代码(推荐),或 rsync/scp 拷贝仓库——拷贝前先确认源侧 .env 不要原样带过去当长期明文。
  2. 在这台机器上同样检查并关闭「桌面与文稿」的 iCloud 同步,避免以后又把 ~/Desktop 当工作区。
  3. 确认 Claude Code 的默认打开目录、tmux 启动目录、LaunchAgent 工作目录都指向 ~/work/...,而不是桌面。
# 快速自检:工作区路径关键字
pwd
case "$(pwd)" in
  */Desktop/*|*/Documents/*|*CloudDocs*) echo "仍在可能同步的路径,请迁出" ;;
  *) echo "路径看起来像本地工作区,请再确认 iCloud 桌面文稿已关" ;;
esac

第三步:只读扫描明文密钥形态

迁移前后都做一次只读扫描。先盯项目文件(本文重点),会话日志可按昨天的文章另扫。

cd ~/work/your-project

# 只读:列出可能含密钥的文件路径(先看路径,再按需打开单个文件)
rg -l -e 'sk-[A-Za-z0-9]' -e 'sk-ant-' -e 'ghp_' -e 'github_pat_' \
  -e 'xox[baprs]-' -e 'AKIA[0-9A-Z]{16}' \
  --glob '!.git/**' . 2>/dev/null | head -80

# 常见明文落点
ls -la .env .env.* .mcp.json **/credentials* 2>/dev/null | head

没有 rg 时:

grep -RIl -E 'sk-[A-Za-z0-9]|sk-ant-|ghp_|github_pat_|xox[baprs]-|AKIA[0-9A-Z]{16}' \
  --exclude-dir=.git . 2>/dev/null | head -80

原则:

  • 先列路径,再人工核对;命中可能是示例、已作废串或截断片段,但形态像真 Key 就按「可能泄露」处理。
  • 扫描结果不要整页贴进公开聊天或又开一个会进 iCloud 的笔记文件。
  • 若项目曾在 iCloud 路径下待过,默认假定云端曾有过副本 → 轮换优先于「我已经删了本机文件」。

第四步:迁出密钥 + 轮换

对确认过的真实密钥:

  1. 在签发方控制台轮换 / 吊销(以你实际用到的服务为准)。旧串作废优先。
  2. 本机改注入方式:

- macOS 钥匙串存密钥,脚本用 security find-generic-password 等方式按需取出(不要写回长期明文文件)。 - 或用仅当前 shell / 进程可见的环境变量启动 Claude Code / MCP,避免写入会被同步的目录。

  1. 仓库内:.env 改为 .env.example(无真实值)+ 本地未跟踪的 .env(且确保该本地文件不在 iCloud 路径);.mcp.json 里不要长期塞完整 Key。
  2. 复查:再跑第三步扫描;同时按会话日志篇扫一遍 ~/.claude/projects,避免「文件干净了、日志里还有」。

可在项目 CLAUDE.md 里加一条硬习惯(只写流程,不写任何真实密钥):

## 密钥
- 工作区必须在 ~/work 下本地路径,禁止放 Desktop/Documents/iCloud。
- 禁止把完整 API Key 写入 .env 长期文件或贴进对话;从钥匙串或进程环境注入。
- 变更密钥后先轮换,再清理旧文件。

第五步:十五分钟验收清单

  • [ ] 新加坡 Mac mini 上 Agent 根目录在 ~/work(或同等本地路径),不在桌面/文稿/iCloud Drive
  • [ ] 该账号已关闭「桌面与文稿」iCloud 同步(或你已确认工作区不在同步范围)
  • [ ] rg/grep 扫描项目后,无未轮换的疑似真实 Key 文件
  • [ ] 新 Key 走钥匙串或非文件注入;.env.example 无真实值
  • [ ] 会话日志目录也按需复查过(与昨天文章互补)
  • [ ] SSH / UU 远程连接可正常进入机器做上述操作

为什么放在常开的新加坡 Mac mini 上

笔记本合盖、带着走、多账号登录 iCloud,都会让「工作区到底有没有在同步」变得难盯。把 Claude Code 的长期工作区放到一台一直开着、用途清楚的新加坡 Mac mini 上:

  • 路径策略固定:只在本地 ~/work,桌面文稿同步默认关掉。
  • 扫描与轮换可以定期跑(tmux / LaunchAgent),人不在场也能先出报告。
  • 主力电脑只负责连过去审结果;即使本机桌面仍开着 iCloud,也不会再把 Agent 的 .env 拖进云。

这不是在承诺万无一失,而是把最常见的一条泄露路径(项目文件云同步)从默认打开改成默认关闭。

和 Zumac.Ai 怎么配合

Zumac.Ai 提供整机独享的新加坡 Mac mini,7×24 在线,支持 SSH 与 UU 远程连接,适合作为 Claude Code 的常驻工作区:本地磁盘跑项目、关掉桌面文稿同步、定期扫明文密钥。Claude 账号由你自己开通和管理,机器是稳定合规的使用环境。新客户整机租用 ¥999/月起(季付 ¥2,697.30,半年付 6 送 1 ¥5,994,年付 12 送 2 ¥11,988)。订购与开通走 panel.zumac.ai;方案说明见 首页费用区;使用问题见 帮助中心;联系 Telegram @singatao。实际延迟取决于你本地的网络线路。

会话日志里的残留 Key 要扫;iCloud 同步出去的项目文件更要先迁走。两条路径都管住,再让 Agent 长期待在同一台常开机器上干活。

Zumac.Ai 新加坡 Mac mini M6,整机独享,¥999/月起,联系 Telegram @singatao。
查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服