凭据

凭据 面板让你把代理需要的机密——git 令牌、SSH 密钥、云凭据、数据库密码——交给机器(在设置编辑器中称为工作区),而这些机密永远不会进入虚拟机。每个值都加密保存在你的 Mac 上。在虚拟机内,代理只能看到一个替身值(例如 brm_…);当请求离开你的 Mac 时,代理服务器会把替身值换成真实值,而且只针对该凭据所属的主机。

本页是逐字段的参考。其机制——传输边界、替身值、主机范围限定、AWS 重新签名、入侵警告——在凭据与传输边界中介绍。凭据在使用前是否需要你批准,以及它可以进行哪些写入,则在护栏中设置。

凭据面板:Git 身份,带占位文字“您的姓名”和 you@example.com,以及说明“写入虚拟机中的 ~/.gitconfig”;一个显示“暂无凭据”的空状态;以及“添加凭据”和“导入 env 文件…”按钮。

注意: 编程代理的模型提供方(Anthropic、OpenAI、xAI、Moonshot、z.ai、Bedrock、OpenRouter、自定义服务器)的 API 密钥和登录不在这里设置。它们位于 偏好设置 › 模型,或机器自己的模型覆盖中。

Git 身份

顶部的两个字段设置写入虚拟机中 ~/.gitconfig 的作者身份:

  • user.name——占位符为 Your Name。
  • user.email——占位符为 [email protected]。

“写入虚拟机中的 ~/.gitconfig。保持两者为空以使用 git 的默认值。”这些不是机密,也不会被替换。更改会在 存储 时应用到运行中的机器。

已导入的配置文件

如果首次设置已把你 Mac 上的配置文件导入这台机器,它们会出现在 已导入的配置文件 下:每个以 ~/<路径> 显示,并注明其中包含多少项设置、排除了多少个机密,以及停用了哪些设置。“原样复制到虚拟机。其中的密钥已被剔除——它们作为上方的凭据导入,因此虚拟机只会看到伪造值。”减号按钮会把文件从机器中移除。

凭据列表

下方的面板只列出这台机器实际拥有的凭据,按类别标题分组:

标题其下显示的内容
GITGitHub、GitLab、Bitbucket 或自托管平台的个人访问令牌。
CLOUDAWS、DigitalOcean、Linear、Twilio、Kubernetes 上下文、容器镜像仓库。
DATABASESMongoDB、ClickHouse 和 Elasticsearch 端点。
SSH机器自己的密钥,以及你导入的任何密钥。
OTHER“Other API key”替换规则。

每一行显示一个图标、一个名称,以及该凭据适用的一台或多台主机。其 ⋯ 菜单(或点按该行)提供 编辑… 和 移除。在你点按 存储 之前,不会从磁盘删除任何内容。

在模型提供方移到“模型”之前就已带有自己代理 API 密钥的机器上,还可能出现 AGENTS 分组。这些行没有 移除;其菜单提供 在“模型”中编辑…,会打开 偏好设置 › 模型(在偏好设置本身,或远程机器的编辑器中,则会切换到该编辑器的 模型 面板)。

没有任何凭据时,面板会显示 暂无凭据——“添加 API 密钥、令牌或 SSH 密钥——或导入 env 文件。真实值保留在你的 Mac 上;虚拟机中始终只有假值。”

添加凭据

添加凭据 会打开凭据类型列表;每种类型都会打开自己的编辑表单,用 完成 关闭:

类型副标题
Git tokenGitHub、GitLab 或 Bitbucket 的个人访问令牌
SSH key导入私钥,或使用工作区专属的密钥
AWS credentials静态 IAM 密钥或 SSO——在传输途中用 SigV4 签名
DigitalOcean tokendoctl/API 个人访问令牌
Linear API keyLinear 个人 API 密钥
Twilio API key账号/API 密钥 SID + 机密——在传输途中使用 HTTP Basic
Kubernetes一个集群上下文(令牌、客户端证书或 exec 插件)
Container registryDocker Hub、ghcr.io 等镜像仓库的登录
DatabaseMongoDB Data API、ClickHouse 或 Elasticsearch
Other API key任何其他令牌——由你选择环境变量和主机

代理 API 密钥(Anthropic、OpenAI、xAI、Moonshot)不在此列表中:它们在 偏好设置 › 模型 中设置。

导入 env 文件

导入 env 文件… 会从已有的 .env 文件或 ~/.bashrc 中读取凭据。解析器读取 KEY=VALUE 和 export KEY=VALUE 行,去掉引号和行尾的 # 注释,并在同一名称重复出现时保留最后一次赋值。它绝不会运行 shell:需要展开的值($VAR、$(…))会被跳过,而不是被错误导入,因此使用真实的 .bashrc 也很安全。

变量会出现在审阅表单 Import from 文件名 中,每个值都会被遮蔽。

已识别 的变量会对应到一种凭据类型:

变量转换为
GH_TOKEN、GITHUB_TOKENGitHub 令牌(会要求 Git 用户名)
GITLAB_TOKEN、GLAB_TOKENGitLab 令牌(会要求 Git 用户名)
AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_SESSION_TOKENAWS 静态密钥
DIGITALOCEAN_ACCESS_TOKEN、DIGITALOCEAN_TOKEN、DO_TOKENDigitalOcean 令牌
LINEAR_API_KEYLinear API 密钥
TWILIO_ACCOUNT_SID、TWILIO_API_KEY_SID、TWILIO_API_KEYTwilio SID
TWILIO_AUTH_TOKEN、TWILIO_API_SECRET、TWILIO_API_KEY_SECRETTwilio 机密
ANTHROPIC_API_KEY、OPENAI_API_KEY、XAI_API_KEY、MOONSHOT_API_KEY、KIMI_API_KEY模型设置中对应提供方的 API 密钥:Anthropic、OpenAI、xAI 或 Moonshot

代理密钥会放到代理获取提供方密钥的地方。在这台 Mac 上,它们会进入 偏好设置 › 模型,因此每台继承全局设置的机器都会得到它们,而且就像该看板上的任何更改一样,导入后立即保存。对于从镜像窗口编辑的远程机器,它们会进入该机器自己的 模型 覆盖,并用 存储 保存;在远程 Mac 的偏好设置中,则进入该 Mac 的全局设置。如果提供方已经有密钥,该密钥会被标记为 Already configured。

与机器已有项目相符的变量会被标记为 Already configured — check to overwrite.,并保持未勾选,因此重新导入绝不会悄悄替换机密。

未识别 的变量可以作为 Other API key 条目导入。每个条目都有一个 主机 字段——替身值要被替换的主机,以逗号分隔;留空表示任何主机。变量名同时成为该条目的名称,以及导出替身值所用的变量。

属于 1Password 引用(op://vault/item/field)的值,会作为保存引用而非机密本身的 Other API key 导入(参见其他 API 密钥)。

按钮显示 Import N credentials。导入会把所选内容加入面板;点按 存储 即可保留。

SSH 密钥

私钥永远不会进入虚拟机:签名由 Mac 上的 ssh-agent 通过私有虚拟套接字提供,因此虚拟机可以请求签名,却无法读取密钥。

  • 机器自己的 ed25519 密钥。 新机器默认勾选 生成 ed25519 密钥对(除非默认模板已提供密钥)。密钥存在后,编辑器会显示其公钥,并附有 拷贝 和 打开 GitHub 密钥页面,以及 重新生成 开关。生成新密钥后,应用会立即显示它,方便你把它添加到 GitHub。
  • 导入的 SSH 密钥。 导入… 会打开文件选择器,然后要求输入 标签,如果密钥已加密,还需要 口令(保存在 macOS 钥匙串中)。支持 RSA、ed25519 和 ecdsa 密钥。
  • 主机代理中的密钥。 从主机代理… 会列出你 Mac 上某个 ssh-agent 持有的密钥——适用于无法以文件形式复制的密钥,例如通过 gpg-agent 使用的 YubiKey、Secretive 或 1Password。选择代理的 socket(留空表示应用的 SSH_AUTH_SOCK;菜单会列出在这台 Mac 上找到的代理,例如 ~/.gnupg/S.gpg-agent.ssh),点击 加载,然后勾选要添加的密钥。只有这些密钥会展示给机器。

SSH 密钥的更改会在机器重启时生效。

Git 令牌(GitHub、GitLab、Bitbucket)

分为 GitHub、GitLab 和 Bitbucket 分组。添加令牌 会添加一行,包含 主机、用户名 和 个人访问令牌(附显示按钮,以及前往该平台令牌页面的链接)。主机可以指向 github.com、gitlab.com 或自托管实例。替身值会写入 ~/.git-credentials 以及 gh/glab 的配置中;gh 和 glab 也会读取 GH_TOKEN/GITLAB_TOKEN。

Linear

一个个人 API 密钥(占位文字形如 lin_api_…,附有前往 Linear API 设置的链接)。以 LINEAR_API_KEY 导出,并且只在发往 linear.app 及其子域名的请求中替换。由 Linear 触发的自动化也需要 Linear 密钥。

Twilio

“Account SID + Auth Token from console.twilio.com (or an API Key SID SK… + its secret).”两个字段:

  • Account SID (AC…) or API Key SID (SK…)——SID 是一个会出现在请求 URL 中的标识符,因此不视为机密;虚拟机会在 TWILIO_ACCOUNT_SID 中原样得到它。
  • Auth Token / API Key secret——虚拟机会在 TWILIO_AUTH_TOKEN 中得到替身值;代理服务器会在发往 twilio.com 的请求中放入真实值。

机密旁边的按钮会打开 Twilio Console。编辑器中还有 使用时需要批准 复选框,与护栏为每个凭据显示的相同。

Kubernetes

每个集群上下文一行。Bromure 会在虚拟机中写入一个让 kubectl 指向代理服务器的 ~/.kube/config;真实身份留在 Mac 上。每个上下文都有名称、服务器 URL、可选的 CA 证书(PEM)、命名空间 和一种认证方式:

  • Bearer 令牌——在传输途中替换。
  • 客户端证书——真实的证书和密钥由 Mac 用于上游连接;虚拟机得到的是一个一次性证书。
  • Exec 插件——一个 命令、参数 以及 刷新 间隔(1–60 分钟)。插件在 Mac 上运行,新的令牌会被替换进去;虚拟机中的 kubectl 永远不会运行它。

导入文件… 会把已有的 kubeconfig 读成每个上下文一行;添加上下文 可以手动添加一个。你用 Bromure 本身创建的集群单独处理——参见 Kubernetes 集群与注册表。在机器运行中添加或编辑的上下文,会在存储时生效,包括其集群的 CA 与客户端证书;应用仍会提议重启。

DigitalOcean

一个个人访问令牌(占位文字形如 dop_v1_…)。以 DIGITALOCEAN_ACCESS_TOKEN 导出并写入 doctl 的配置中,因此不需要 doctl auth init。在发往 digitalocean.com 的请求中替换,包括 docker login/doctl registry login 对 registry.digitalocean.com 使用的 Basic 认证形式。

AWS

供 aws CLI、各种 SDK、terraform 等工具使用。真实机密永远不会到达虚拟机:Mac 会用真实密钥重新签名每个请求,而绕过代理服务器的请求会被 AWS 拒绝(InvalidSignatureException)。认证方式 控件可选择:

  • 静态密钥——访问密钥 ID、秘密访问密钥、可选的 会话令牌(“可选 — 仅 STS”)以及 默认区域,并附有 打开 IAM 凭证页面。
  • SSO / Identity Center——授予对你 ~/.aws 文件夹的访问权限,然后从你的 ~/.aws/config 中选择一个 SSO 配置文件。临时凭据会在 Mac 上获取,必要时 Mac 会在你的浏览器中运行 aws sso login。(在 iPhone、iPad 和 Vision Pro 客户端中,则改为输入配置文件名称。)

当“模型”中启用了 Bedrock 但没有 Bedrock API 密钥时,机器的 AWS 凭据还会为 Amazon Bedrock 请求签名。AWS 的更改会在机器重启时生效。

容器镜像仓库

供 docker pull/docker push 使用的、按镜像仓库划分的登录。虚拟机的 ~/.docker/config.json 中存放替身值,而代理服务器会在发往该镜像仓库的请求中放入真实密码。添加 菜单提供 Docker Hub (docker.io)、GitHub Container Registry (ghcr.io)、GitLab Container Registry (registry.gitlab.com)、Quay (quay.io)、其他主机… 和 导入 config.json…(密码保存在凭据辅助程序或钥匙串中的条目会被跳过并计数)。每一行都有 主机、用户名 和 密码或令牌。

数据库(MongoDB、ClickHouse、Elasticsearch)

每个 HTTPS 端点一行,按引擎分组。每一行都有可选的 名称、主机(也用来限定该端点的写入策略)、一种 身份验证 方式——Username + password、API 密钥 或 Bearer 令牌(MongoDB 默认为 API 密钥,其他默认为用户名 + 密码)——密码认证用的 用户名、机密,以及 环境变量:以逗号分隔、用来导出替身值的名称。替身值无论出现在请求头、查询字符串还是正文中都会被替换。

其他 API 密钥

适用于 Bromure 本身不处理的任何服务。每个条目都是一条替换规则:

  • 名称——给你自己看的标签(占位文字“e.g. Stripe (sandbox)”)。
  • 真实密钥——密钥本身(占位文字 sk_live_…)。你也可以改为粘贴 1Password 引用(op://vault/item/field):只保存引用,Bromure 会在启动时用 1Password 的 op CLI 获取机密,并每 2 分钟刷新一次。如果尚未安装,获取 1Password CLI 链接可以提供帮助。
  • 环境变量——代理找到替身值的位置(占位文字 STRIPE_API_KEY)。留空则不导出任何内容。
  • API host(s) (optional)——主机名,以逗号分隔,不含 https:// 或路径。真实密钥只会在发往这些主机及其子域名的请求中替换。留空表示允许任何主机。

警告: 没有主机的条目会在任何主机上替换,而且不受入侵警告保护——这正是“任何主机”的含义。要管控未限定范围的机密,请为它指定主机,或在护栏中为它开启 使用时需要批准。

OpenShell 提供方配置文件

在沙盒引擎为 OpenShell + Sentry 的机器上,窗格最后会有一个 OpenShell provider profiles 分区(仅限 Mac)。

Attach provider profile… 会导入一份 OpenShell 提供方配置文件(openshell profile export 写出的 YAML 或 JSON)。一张表单会要求 Instance name(默认为配置文件的 ID),以及配置文件中每个凭据的值(必填的标有 *);点击 Attach 即可添加。每个值都会成为这台机器的一个凭据,名称为 实例 · 凭据,绑定到配置文件的主机与路径,并以配置文件指定的环境变量提供。配置文件的端点会以规则的形式加入,好让它们连得到。和任何凭据一样,Bromure 会把真正的值留在 Mac 上,只给 VM 替身。垃圾桶按钮会卸下配置文件并移除它的凭据。没有声明任何端点的配置文件会被拒绝,因为它的凭据无处可用。会 refresh 或使用 token_grant 的凭据,会被当成你输入的静态值使用。

Use OpenShell credential placeholders(默认关闭)会让代理在它的环境中看到 openshell:resolve:env:NAME,而不是 Bromure 那种以假乱真的令牌——适用于这台机器以环境变量传递的凭据,就像在 OpenShell 下一样。代理服务器会把真正的值换进请求标头;只有在端点设置了 request_body_credential_rewrite 或 websocket_credential_rewrite 时,才会换进请求正文或 WebSocket 消息。每个凭据仍然只在自己的主机上有效。以其他格式发送的凭据(git 与镜像仓库的登录、订阅的登录)保留 Bromure 的替身。有些工具会检查令牌的格式,可能会拒绝占位符。下次 VM 启动时生效。

更改何时生效

Git 身份、git 令牌、Linear、Twilio、DigitalOcean、容器镜像仓库、数据库和其他 API 密钥会在 存储 时应用到运行中的机器。SSH 密钥和 AWS 凭据需要重启;存储时应用会提议重启。Kubernetes 上下文在存储时即可运作,应用也会提议重启。OpenShell 凭据占位符在下次 VM 启动时生效。

此面板中的一切都保存在机器加密的 secrets.enc 中,绝不会存放在 profile.json。

设置参考

编辑器其保存的内容
Git 身份~/.gitconfig 的 user.name/user.email;非机密。
SSH key机器的密钥和导入的密钥;由 Mac 的 ssh-agent 提供。
Git tokenGitHub、GitLab、Bitbucket 各主机的用户名和令牌。
Linear API keyLINEAR_API_KEY,在 linear.app 上替换。
Twilio API keyTWILIO_ACCOUNT_SID 原样提供,TWILIO_AUTH_TOKEN 为替身值,在 twilio.com 上替换。
Kubernetes上下文(令牌、客户端证书、exec 插件)。
DigitalOcean tokenDIGITALOCEAN_ACCESS_TOKEN 和 doctl 配置。
AWS credentials静态密钥或 SSO;由 Mac 重新签名请求。也为 Bedrock 签名。
Container registry按镜像仓库划分的登录;替身值位于 ~/.docker/config.json。
Database每个端点的机密,以你命名的变量导出。
Other API key机密或 1Password 引用、变量、可选的主机。
导入 env 文件…从 .env 或 ~/.bashrc 批量导入。

相关章节