跳转到内容
全部开发指南

Claude Code 沙箱怎么防止命令读走密钥?sandbox.credentials 和另外 3 个实用更新

AIGoCode发布于 更新于

Claude Code 沙箱怎么防止命令读走密钥?sandbox.credentials 和另外 3 个实用更新 封面

不少人装好 Claude Code 之后就很少再管版本,能用就行。可它的更新节奏很快,相邻两个小版本有时只隔一两天,很多实用改动只写在 changelog 里,没有单独的公告。

这篇挑出 v2.1.186 和 v2.1.187 两个版本里对日常使用影响最大的 4 项改动:沙箱凭证保护 sandbox.credentials、命令行登录 MCP 服务器、远程 MCP 工具调用的空闲超时,以及 ! 命令跑完后 Claude 自动接着分析输出。每一项都会讲清楚它解决什么问题、怎么配置、有哪些边界。如果你在用 Claude Code 的沙箱模式,或者经常通过 SSH 在服务器上用它,这几项都值得了解。

Claude Code 版本更新 原文配图 1

一、sandbox.credentials:不让沙箱里的命令读到凭证

先说最重要的一项。Claude Code 的沙箱会限制命令能访问的网络和文件,但按官方沙箱文档的说明,默认情况下沙箱内的命令仍能读取机器上的大部分文件,包括 ~/.ssh、~/.aws/credentials 这类凭证文件;环境变量也会从 Claude Code 继承下来,里面可能就有各种 token。

v2.1.187 新增的 sandbox.credentials 就是为这件事准备的:你声明要保护哪些凭证文件和环境变量,沙箱里跑的命令就读不到它们。官方文档给的示例如下,它禁止读取 AWS 凭证文件和 SSH 目录,并在每条沙箱命令运行前移除 GITHUB_TOKEN 和 NPM_TOKEN:

{
  "sandbox": {
    "enabled": true,
    "credentials": {
      "files": [
        { "path": "~/.aws/credentials", "mode": "deny" },
        { "path": "~/.ssh", "mode": "deny" }
      ],
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" },
        { "name": "NPM_TOKEN", "mode": "deny" }
      ]
    }
  }
}

sandbox.credentials 原文配图 2

配置时有几点要注意:

  • 只保护你列出来的东西。官方文档写明没有内置的凭证黑名单,没列进去的文件和变量不受限制,所以要把项目里真正用到的 key 都写上。
  • 写在哪个配置文件里有区别。项目级和本地级设置(仓库里的 .claude/settings.json、.claude/settings.local.json)中的 credentials 条目不会生效(v2.1.246 起);放在用户设置 ~/.claude/settings.json 或企业托管设置里才算数。这是为了防止一个仓库自己改写凭证规则。
  • 除了 deny 还有 mask。mode 设为 mask 时,沙箱命令看到的是一个会话内的占位值,只有在请求发往你允许的域名时,沙箱代理才替换成真实值。mask 只认用户设置、托管设置和 --settings 参数里的配置。
  • 只管沙箱里的 Bash 命令。想让所有子进程都拿不到凭证,不管是否在沙箱里,官方建议另外设置环境变量 CLAUDE_CODE_SUBPROCESS_ENV_SCRUB。

平时会让 Claude Code 跑第三方脚本,或者装了不少第三方 MCP 服务器的,建议把这项配上。API Key 本身该放在哪、泄露了怎么处理,可以参考 AIGoCode API Key 放哪里:本地环境变量、公开代码与泄露后的处理顺序;想再加一道防止危险操作的护栏,可以看 用 Claude Code Hooks 装上三道硬护栏。

二、claude mcp login:在命令行里完成 MCP 认证

以前给需要 OAuth 的远程 MCP 服务器做认证,要在会话里打开交互式的 /mcp 面板一步步操作。在本机还好,通过 SSH 连到服务器上用 Claude Code 时就很别扭。

v2.1.186 加了两个命令,直接在 shell 里完成登录和登出:

claude mcp login sentry
claude mcp logout sentry

把 sentry 换成你在配置里给 MCP 服务器起的名字即可。按官方 MCP 文档的说明,claude mcp login 发现本机没有可用的浏览器时(比如 SSH 会话、没有图形界面的 Linux),会直接打印授权链接:你在自己电脑上打开链接完成授权,再把浏览器地址栏里的完整回调地址粘贴回终端。粘贴这一步需要交互式终端,所以 SSH 连接时要加 -t。如果本机有浏览器但你仍想走这种方式,可以加 --no-browser:

claude mcp login sentry --no-browser

claude mcp login 原文配图 3

这个命令对非交互场景也有用。claude -p 和 Agent SDK 运行时没有 /mcp 面板,没法走 OAuth 流程,官方的做法是先在 shell 里用 claude mcp login 登录好,再启动任务。

三、远程 MCP 工具调用不会再无限挂起

以前调用远程 MCP 工具时,偶尔会遇到请求发出去之后既不报错也不返回,会话就一直卡在那里,只能干等或者强制退出。

v2.1.187 起,远程 MCP 工具调用如果 5 分钟没有任何响应,会自动中止并报错,不再无限阻塞。按官方环境变量文档,网络类 MCP 服务器的默认空闲超时是 5 分钟,stdio 服务器是 30 分钟。需要调整的话,可以设置 CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT,单位是毫秒,设为 0 表示关闭空闲检查。

如果某个工具本来就要跑很久(比如一次大批量查询),可以在 .mcp.json 里给这个服务器单独设置 timeout:只要不小于 1000 毫秒,这个服务器的空闲等待时间就至少是这个值,不会被提前中止。

MCP 工具调用超时 原文配图 4

四、! 命令跑完,Claude 会自动接着分析输出

在 Claude Code 里,以 ! 开头可以直接执行 shell 命令。以前命令跑完,输出只是进入上下文,你还得再发一句话让 Claude 看。

v2.1.186 起,! 命令的输出会自动触发一次回复。比如输入 !npm test,测试一失败,Claude 就会接着输出分析哪里出了问题,省掉了复制报错再提问的那一步。

如果你更喜欢以前的方式,只想把输出放进上下文、不让 Claude 自动回复,可以在 settings.json 里关掉:

{
  "respondToBashCommands": false
}

! 命令自动分析 原文配图 5

怎么升级,怎么确认版本

上面这 4 项至少需要 v2.1.187。按官方安装文档:

  • 用原生安装方式装的 Claude Code 会在后台自动更新,也可以手动运行 claude update;
  • 用 Homebrew 装的不会自动更新,要手动运行 brew upgrade claude-code;
  • 用 npm 全局安装的,可以重新执行 npm install -g @anthropic-ai/claude-code 更新。

升级后运行 claude --version 查看版本号;想看安装和自动更新状态,可以运行 claude doctor,它只做只读检查,不会启动会话。每个版本具体改了什么,以 Claude Code 官方仓库的 CHANGELOG 为准。

总结

这 4 项改动里,sandbox.credentials 和 claude mcp login 最值得马上用起来:前者给沙箱补上了凭证保护,后者解决了 SSH 和非交互场景下 MCP 认证难的问题。MCP 空闲超时和 ! 命令自动分析属于默认开启的改进,知道怎么调整或关闭就够了。

如果你还没开始用 Claude Code,可以在 AIGoCode 上直接接入使用。

参考链接