实测AI Agent生成代码在78ms内即可枚举环境变量、读取SSH/AWS凭据、完成网络探测,揭示timeout防护的局限性,并对比主流沙箱产品。
让模型写代码现在已经很常见。但让那段代码跑在存有你凭证的机器上——在此之前没人测量过这件事,直到它变得重要。所以我测量了:一段 Python 代码,用大多数人执行 agent 输出结果的方式运行,枚举了 60 个环境变量、可读的 ~/.ssh、可读的 ~/.aws、活动的出站网络,以及对自己目录之外路径的写权限。耗时:78 毫秒。
这一个数字就是这个整个产品类别的核心论据,同时也是为什么人们本能想到的第一个防御手段会失效的原因。超时限制的是时长,而不是影响范围。5 秒大约是那次侦察所需时间的 64 倍。
我在 DevToolLab 上写了更完整的版本,包含完整的价格明细:2026 年最佳 AI 代码执行沙盒。另外在文章中还埋了一个重要信息,在比较任何产品之前你需要知道:四个平台中有一个在每个盘点列表里仍被标注为开源的项目,在 2026 年 6 月已停止开源。

真正沙盒隔离的四件事
覆盖其中三件不算沙盒,只能算减速带。
文件系统。只能看到自己的工作目录。看不了你的 home 文件夹,更看不到放在那里的凭证文件。
网络。出口流量默认拒绝,或者走白名单放行。代码能读取密钥又能发起出站请求,这就是一个带额外仪式的内鬼通道。
进程和内核。共享内核意味着一次容器逃逸等于主机被拿下。这正是严肃平台用 microVM 而不是普通容器的根本原因。
资源。对 CPU、内存和墙上时间设上限,这样一个无限循环只扣钱而不至于把节点打挂。
采购前先测量你自己的暴露面
在认定隔离是别人的问题之前,值得跑一下这个脚本。它只统计暴露面,不会打印任何密钥值,也不会传输任何东西。
"""What agent-generated code can reach when you just run it."""
import os
import socket
import tempfile
from pathlib import Path
SECRET_HINTS = ("KEY", "TOKEN", "SECRET", "PASSWORD", "CREDENTIAL", "API")
# 1. Environment: this is where API keys live.
env_total = len(os.environ)
env_secretish = [k for k in os.environ if any(h in k.upper() for h in SECRET_HINTS)]
# 2. Filesystem: can it see the paths that hold long-lived credentials?
home = Path.home()
sensitive = {
"~/.ssh": home / ".ssh",
"~/.aws": home / ".aws",
"~/.config": home / ".config",
"~/.gitconfig": home / ".gitconfig",
}
readable = {}
for label, p in sensitive.items():
try:
if p.is_dir():
readable[label] = f"{len(list(p.iterdir()))} entries"
elif p.exists():
readable[label] = f"{p.stat().st_size} bytes"
else:
readable[label] = "absent"
except PermissionError:
readable[label] = "permission denied"
# 3. Network: can it reach the internet to send what it found?
try:
s = socket.create_connection(("1.1.1.1", 443), timeout=4)
s.close()
net = "reachable"
except OSError as e:
net = f"blocked ({type(e).__name__})"
# 4. Write access outside its own directory.
try:
p = Path(tempfile.gettempdir()) / "agent_was_here.txt"
p.write_text("x")
p.unlink()
write = "yes"
except OSError:
write = "no"
print(f"env vars visible : {env_total}")
print(f" ...that look like creds : {len(env_secretish)} {sorted(env_secretish)[:4]}")
print("credential paths reachable:")
for k, v in readable.items():
print(f" {k:<14} {v}")
print(f"outbound network : {net}")
print(f"write outside cwd : {write}")
在我这台注重安全的 shell 环境下运行输出:
env vars visible : 60
...that look like creds : 0 []
credential paths reachable:
~/.ssh 10 entries
~/.aws 2 entries
~/.config 20 entries
~/.gitconfig 109 bytes
outbound network : reachable
write outside cwd : yes
注意那个零个疑似凭证的环境变量。这既是好消息,也证明脚本没有对我有利堆筹码。暴露面全在文件系统侧:~/.ssh 下有 10 个可读条目,~/.aws 下 2 个,还有开放的网络可以转移它们。现在加上所有人都第一个想到的防护:
completed in 78ms under a 5000ms timeout
Daytona 不再是开源的了
Daytona 在这个领域的每个列表里都会出现,而且几乎总是被标注为开源之选,72,000 个 GitHub star 也印证了这个声誉。现在打开它的仓库,根目录只有一个 README 和一个 images 文件夹。源码已经没了。

那条横幅没有留下任何解读空间:不再维护,核心开发已移至私有代码库(2026 年 6 月),不再有后续更新、修复或发布。之前公开的部分保持 AGPL-3.0,在 v0.190.0 标签处冻结。往下翻同一个 README,它仍然写着"我们的开源平台",自转向以来从未更新过。
这些都不能说明这个产品不好。OCI 兼容的沙盒,有专用内核,支持 Python、TypeScript 和 JavaScript,号称冷启动在 90ms 以内。有一点需要注意的是:所有人引用的 90ms 数字来自 Daytona 自己的 README,而非独立基准测试。把它当作现在的私有服务来算预算,不要制定任何依赖分叉它的计划。
E2B 是 Apache 2.0,约 13,400 个 star,e2b-dev/E2B 仍在活跃维护。它从一开始就是为 agent 代码执行设计的,而不是后期改造的。计算资源价格为 $0.0504/vCPU 小时,$0.0162/GiB 小时,存储免费。Hobby 档给你一次性的 $100 额度,会话限制 1 小时,最多 20 个并发沙盒。Pro 每月 $150 加用量,会话延长到 24 小时,并发提升到 100,可扩展到 1,100。没有 GPU 选项。

Modal,以及两个容易被引错的数据
Modal 是涉及 GPU 时的首选:H100 SXM5 $3.95/小时,A100 80GB $2.50/小时,而且没有配额审批流程挡路。它在空闲时也不计费,这对于突发型的 agent 工作负载是真正的优势。
有两个计费细节容易搞错。第一,沙盒定价不是 Modal 通用计算定价:沙盒是 $0.142/核心 小时,而标准计算是 $0.047,大约是通常在比较中被引用价格的三倍。第二,Modal 按物理核心计费,它自己的定价页将一个物理核心定义为两个 vCPU。统一算下来,一个沙盒核心约为 $0.071/vCPU 小时,这个价格就和 Cloudflare 站在一起而不是在贵的那一端了。Starter 免费送 $30 额度,Team 每月 $250 送 $100。

Cloudflare 和 Vercel
Cloudflare Sandboxes 在边缘运行容器,靠近用户——如果你的优化目标是每次调用的延迟,这就是正确的形态。活跃 CPU 为 $0.072/vCPU 小时。问题在于这只是多个计量表中的一个:Workers 请求和 Durable Objects 单独计费,而且前提是你必须先有一个每月 $5 的 Workers Paid 套餐才能启用任何功能。
Vercel Sandbox 是生态赌注,主要在你已经部署在 Vercel 上时才有意义。活跃 CPU 为 $0.128/小时,创建 $0.60/百万次,网络 $0.15/GB,快照 $0.08/GB 月。让人意外的条款是内存按配置的 GB 小时计费——只要你配置了沙盒就按配置量计费,而不是按实际消耗量。一块被遗忘的空闲沙盒依然在为你消耗内存。
按 vCPU 小时计 E2B 最便宜 $0.0504,Modal 和 Cloudflare 抱团在 $0.071 和 $0.072,Vercel 最贵 $0.128。自己去验证的时候注意单位:Modal 的 $0.142 标题价格覆盖的是两个 vCPU,直接横向比较会把实际数字翻倍。
在有负载的情况下排名又会重新洗牌。Modal 空闲时不计费,这使得它对于波峰型工作来说比便宜的按时计费更划算。E2B 的便宜计算背后是你需要超过一小时的会话时就有 $150/月的门槛。Cloudflare 在加上其他三个计量表之前看起来是中等价位。
不涉及 GPU 的短时未信任代码:选 E2B。一直用 Hobby 档直到一小时会话限制或 20 个沙盒并发限制真正碍事。
任何涉及模型或 GPU 的场景:选 Modal,按沙盒费率而不是计算费率算预算。
对用户延迟敏感的执行场景:选 Cloudflare,把四个计费维度都列进你的表格。
已经在 Vercel 上且想统一账单:选 Vercel Sandbox,但要给沙盒生命周期设硬上限,因为配置的内存会在整个存活期间持续计费。
agent 需要长期驻留的工作空间:选 Daytona,按现在的私有产品定价。
六个步骤接入一个沙盒而不出意外
先在你自己的机器上跑上面的脚本。如果 ~/.ssh 和 ~/.aws 都返回可读,你的商业论证就写好了。
有目的地选择基础镜像。这些平台都是 OCI 兼容的,所以沙盒的精简程度完全取决于你给它的镜像。Dockerfile 生成器可以脚手架一个,用 dockerignore 生成器防止 .env、.ssh 和 .aws 在构建时被复制进去——这是号称隔离的镜像自己夹带密钥最常见的途径。
在付费之前先用隔离标志本地测试。--network none 和 --read-only 在你自己的笔记本上就能试,docker run 命令生成器把它们组装起来,这样你就能看到上面的脚本按预期失败。
审查你注入的环境变量。任何你传进去的东西,沙盒内的代码都能读到。用 dotenv linter 过一遍文件,只传沙盒真正需要的那些 key。
设置生命周期,而不只是超时。超时限制的是单次调用;沙盒如果一直跑着就会一直计费,而且在 Vercel 上配置内存在整个存活期间都在计费。
默认拒绝出口流量。白名单放行任务所需的少数几个主机。这是唯一能把凭证泄露降级为无事发生的控制手段。
原文在每个平台的计费维度上比我这里展开的更详细。
无论如何保留这个测量结果:未隔离的 agent 代码在 78 毫秒内就触及了凭证目录和开放网络,而大多数人所依赖的超时设置比这个慢了 64 倍根本不起作用。一旦你在执行模型写的代码,隔离就不再是可选项。
关于平台选择,说实话:E2B 是每 vCPU 小时最便宜的,也是这里最后一个真正的开源选项。Modal 在 GPU 和空闲计费上胜出,但沙盒的计费大约是其宣传计算费率的 3 倍。Cloudflare 在四个计量表上赢得延迟优势。Vercel 每小时最贵,但如果已经生活在它的生态里也最省事。Daytona 是一个扎实的产品,但它已经不再是开源的了——无论盘点列表和它自己的 README 怎么写。
这个领域的定价、许可证和仓库状态变化很快。在你做决定那天去检查每个厂商的页面。
2026 年最佳 AI 代码执行沙盒:E2B、Modal、Daytona 和 Cloudflare 对比——DevToolLab 上的原文和更完整版本
Cloudflare Sandboxes 定价
Vercel Sandbox 定价
daytonaio/daytona v0.190.0,最后一个公开 release
开发者安全工具包——代码写好之后对其本身进行扫描
进一步的操作,你可以考虑屏蔽此人和/或举报滥用行为