Claude Code

Claude Code 的安全问题,本质是凭据问题

权限系统决定 Claude Code 可以运行哪些工具。它完全没说这些工具能够到什么,而它们能够到的,是你机器上的每一个密钥。Sallyport 把密钥挪到智能体读不到的地方。

权限只管到工具这一层一条被允许的 shell 命令就能读 .env缺口在密钥所在的地方
权限

权限提示真正管住了什么

你没允许过的工具,Claude Code 会先问一声。规则写在 settings.json 里,分成 allow、ask、deny 三个列表,值得好好配一遍。

allow

你预先批准的工具

像 Bash(git commit:*) 这样的规则,会让这条命令直接通过。规则约束的是命令本身,不是命令跑起来之后打开的东西。

不提示

ask

所有没列进去的

默认情况。Claude Code 把工具调用摆给你看,然后等着。你是在当下审查一个动作,凭的是凌晨两点手头恰好有的那点上下文。

提示

deny

你封掉的路径和工具

一条 deny 规则能把 Read 工具挡在 ./.env 之外。它挡不住一条被允许的 shell 命令去读同一个文件,对你的依赖启动的那些进程更是说不上话。

部分拦住

bypass

完全没有提示

--dangerously-skip-permissions 这个开关把问题整个去掉了。下面有专门一节讲它。

不提示

这些规则管的都是智能体的工具,没有一条管得着工具去读的那个文件。你的 API 令牌在 .env 里,SSH 私钥在 ~/.ssh 里,任何以你的身份运行的进程都读得到,有没有提示都一样。

YOLO 模式

--dangerously-skip-permissions 真正关掉的是什么

人们用它是有正当理由的:长时间的重构,通宵跑的任务,一个确认对话框就意味着活儿停到天亮。那就更值得弄清楚,你拿什么换了它。

它关掉的是确认,不是能力

Claude Code 本来就能读你的文件、用你的 shell、连出去访问网络。这个开关拿掉的,是那个本来能让你察觉的停顿。

那个文件一直都是可读的

提示是一个抓住智能体去开 .env 的机会,但它从来不是文件外面的一道墙。任何以你身份运行的进程都能读它,包括你正在看提示时 npm 刚装上的那个依赖。

影响范围就是你的 shell 能干的一切

抓取的网页里有一处提示注入,传递依赖里有一份被投毒的 README,这些指令就落进了一个握着你凭据、又不再有任何提示的会话里。

YOLO 模式让你失去了察觉的机会。把密钥放到伸手可及处的不是它,默认模式下它们也一样伸手可及。

安全审查

审查你的代码是另一件事

Claude Code 会读 diff 并指出里面的漏洞,这个该让它做。但那件事管的是你要发布的代码,它没有回答智能体自己在运行时能够到什么,而这才是本页在讲的暴露面。两个各自独立的问题,解决其中一个对另一个毫无帮助。

解决办法

把密钥从桌面上拿走

Sallyport 拿着凭据,由它来发起调用。Claude Code 要一个动作,拿回一个结果。密钥不会进入它的环境,所以被跳过的提示、被投毒的依赖、被注入的指令,都没有东西可以带走。

  1. 01

    智能体请求一个动作

    发往 api.stripe.com 的 http.request,或者在 prod-03 上的 ssh.exec。它通过 MCP 抵达,和 Claude Code 调用任何其他工具的方式一样。

  2. 02

    Sallyport 做判断

    密钥库锁着就一律拒绝。标记为逐次调用批准的密钥,每次都会弹出一张卡片。其余情况下每次智能体运行一张卡片,上面带着调用方的代码签名主体。

  3. 03

    Sallyport 发起调用

    凭据是在 App 内部、执行的那一刻附加上去的。它不进入智能体的环境,跨主机跳转也不会把它带过去。

  4. 04

    审计日志留下凭证

    在动作发生的同时加密并做哈希链接。你可以查清跑过什么,而不必依赖智能体自己的说法。

之后,Claude Code 你想怎么跑就怎么跑,提示开着关着都行。真正要紧的那个决定,已经不在智能体手里了。

配置

把 Claude Code 指向门禁

Sallyport 待在菜单栏里,密钥库就跑在它自己的进程中。没有守护进程,也没有账号。

01

安装并启动

引导流程会创建密钥库,并打开它的 Touch ID 门禁。

brew install --cask olegsotnikov/tap/sallyport
02

注册 MCP shim

Claude Code 由此拿到 http.request、ssh.exec,以及你经 Sallyport 代理的任何上游 MCP 服务器。

claude mcp add sallyport -- /Applications/Sallyport.app/Contents/MacOS/sp mcp
03

把密钥搬走,再删掉副本

把凭据放进密钥库,绑定到它对应的主机,然后从 .env 里删掉。让你心里发怵的那几个,标记成逐次调用批准。

stripe → api.stripe.com · 逐次调用批准

大约两分钟。留下来的提示是 Sallyport 的,问的是要不要对真实基础设施动手,而不是哪个工具可以运行。

常见问题

Claude Code 与 Sallyport

我还能用 --dangerously-skip-permissions 吗?
能,而且密钥挪出可及范围之后,这么做要合理得多。Sallyport 的批准和 Claude Code 的批准是两套,跳过一套不会连另一套一起跳过。
这会不会拖慢 Claude Code?
每次智能体运行一张卡片,之后到运行结束都不再打扰,除非你把某个密钥标成了逐次调用批准。已批准的调用,速度就是它背后那个 API 的速度。
Claude Code 看得到 API 的响应吗?
看得到。Sallyport 把目标返回的响应原样送回,不检查内容。如果某个服务在自己的响应里把密钥回显出来,智能体就会看到那份响应。请求要过门禁;响应不做过滤。
Sallyport 是 Claude Code 的插件吗?
不是。它是一个带 MCP shim 的 Mac App,因此适用于任何 MCP 客户端,Claude Code 升级时这边没有什么要跟着改。
那 Cursor、Codex 之类的呢?
机制一样,因为它们都讲 MCP。我们测得最多的是 Claude Code,Cursor 和 Codex 也在常规轮换里。

让它跳过每一个提示。它照样读不到你的密钥。

免费下载。需要 Apple Silicon、macOS 14 或更高版本。永远无需账户。

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon

Sallyport

Sallyport 替你的 AI 智能体执行 API 调用和 SSH 命令。密钥留在你 Mac 上的本地密钥库里;每次运行由你批准,每个操作都落入一份密封的审计日志。

© 2026 Sallyport · 依据 Apache-2.0 开源 · Oleg Sotnikov