>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Rust

如何在本地运行 AI Agent 而不泄露 SSH 密钥

当你在终端中直接运行 Claude Code、OpenCode 或任何其他自主 Agent 时,总会有一种隐隐的不安感。我们赋予了第三方语言模型在终端中执行命令、读取文件和修改源代码的权限。而默认情况下,该进程保留与本地用户相同的权限。模型可能会意外读取 .env 文件、浏览 ~/.ssh/id_rsa 目录,或从主目录下载配置文件。

通常,人们会启动 Docker 容器或虚拟机来保证安全。但这对于日常工作来说很不方便。容器启动耗时耗力,消耗数 GB 内存,还需要不断配置文件夹挂载。

nono 项目提供了一种不同的解决方案。它由之前推出 Sigstore 的团队创建——Sigstore 是 PyPI、npm 和 Homebrew 使用的包数字签名标准。

nono logo

毫秒级进程隔离

该工具无需使用容器、后台守护进程或虚拟磁盘,即可为任何 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 很少在隔离的真空中工作。通常它们会调用 gitghkubectl 等工具或启动 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 密钥和云端访问的安全问题。

相关项目