如何在本地运行 AI Agent 而不泄露 SSH 密钥
当你在终端中直接运行 Claude Code、OpenCode 或任何其他自主 Agent 时,总会有一种隐隐的不安感。我们赋予了第三方语言模型在终端中执行命令、读取文件和修改源代码的权限。而默认情况下,该进程保留与本地用户相同的权限。模型可能会意外读取 .env 文件、浏览 ~/.ssh/id_rsa 目录,或从主目录下载配置文件。
通常,人们会启动 Docker 容器或虚拟机来保证安全。但这对于日常工作来说很不方便。容器启动耗时耗力,消耗数 GB 内存,还需要不断配置文件夹挂载。
nono 项目提供了一种不同的解决方案。它由之前推出 Sigstore 的团队创建——Sigstore 是 PyPI、npm 和 Homebrew 使用的包数字签名标准。
毫秒级进程隔离
该工具无需使用容器、后台守护进程或虚拟磁盘,即可为任何 AI 进程创建沙箱。你只需用一个 CLI 命令包装 Agent 的启动,进程就会立即进入受限环境。
项目代码使用 Rust 编写。支持 macOS、Linux 以及通过 WSL2 的 Windows。
启动 Agent 的方式如下:
nono search opencode
nono run --profile nolabs-ai/opencode -- opencode
执行此命令后,opencode 只能读取和编辑当前文件夹中的文件。磁盘上的所有其他目录、私有 SSH 密钥和全局系统变量对该进程完全不可见。
安全配置文件的使用
访问设置存储在 registry.nono.sh 的专用注册表中。注册表中有针对流行工具的现成配置文件。配置文件描述了文件访问规则、允许的网络主机和令牌转发选项。
如果注册表中的现成配置文件不适合你,可以轻松自定义:
nono profile init opencode --extends nolabs-ai/opencode
nono run --profile opencode -- opencode
该命令会生成一个包含声明式配置的 JSON 文件。你可以编辑它,保存到公司的 Git 中,并在团队中共享使用。
外部工具隔离与令牌代理
nono 最有趣的部分是它如何与外部工具配合工作。Agent 很少在隔离的真空中工作。通常它们会调用 git、gh、kubectl 等工具或启动 MCP 服务器。
标准沙箱要么给 Agent 完全的网络和密钥访问权限,要么全部切断。在 nono 中,工具在独立的子沙箱中启动,每个子沙箱都有自己的策略。
工作流程如下:
- Agent 想要运行
git,但子进程只获得仓库目录和 Git 服务文件的访问权限。 - Agent 请求使用
gh,但原始的 GitHub 令牌根本不会到达 Agent 的内存中。 - 请求通过内置代理服务器,你可以配置 HTTP 方法级别的过滤。
- 你可以允许 Agent 仅通过 GET 请求读取 issue 列表,同时阻止仓库删除和推送到主分支。
访问策略固定在配置文件中。Agent 无法从内部更改这些规则或从内存中提取授权凭证。
限制 GitHub API 访问的配置示例:
{
"command_policies": {
"credentials": {
"github-api": {
"type": "proxy",
"upstream": "https://api.github.com",
"credential_key": "keyring://gh:github.com/example?decode=go-keyring",
"env_var": "GH_TOKEN",
"inject_header": "Authorization",
"credential_format": "Bearer {}"
}
},
"commands": {
"gh": {
"from": {
"session": {
"sandbox": {
"fs_read": ["."],
"credentials": [
{
"name": "github-api",
"endpoint_policy": {
"default": "deny",
"allow": [
{ "method": "GET", "path": "/repos/nolabs-ai/nono/issues/**" }
]
}
}
]
}
}
}
}
}
}
}
适用于不同语言的现成库
开发者没有将项目限制为 CLI 工具。如果你正在编写自己的 AI Agent 或服务框架,可以将权限限制直接嵌入到应用程序代码中。
仓库中有现成的 FFI 绑定:
- Python(
nono-py) - TypeScript(
nono-ts) - Go(
nono-go) - Rust(原生库)
快速入门
通过 Homebrew 在 macOS 上安装该工具只需一条命令:
brew install nono
对于其他平台,可以使用标准安装脚本:
curl -fsSL https://nono.sh/install.sh | sh
该项目采用 Apache-2.0 许可证开源。代码透明,GitHub 仓库已获得超过 3,000 颗星。
值得安装吗
如果你每天使用 Claude Code、OpenCode 等控制台 AI Agent,或开发自己的基于 MCP 的工具,不妨了解一下 nono。这是一种便捷的方式,让你在不牺牲终端速度的前提下,无需再担心 SSH 密钥和云端访问的安全问题。
相关项目