mcpField
B
brokre

brokre

本地服务
github.com/Furowu安全35 周前更新

关于 brokre

brokre 是供 AI Agent 和用户调用需密码命令行工具的本地凭据代理。它在终端提示处注入已保存的凭据,避免明文密码进入 AI 上下文或可观察的进程状态。

主要功能

  1. 01在终端提示处注入密码
  2. 02包装 PATH 中的任意 CLI
  3. 03加密凭据保险库
  4. 04可验证的审计日志
  5. 05SSH 主机堡垒路由

适用场景

  1. 01通过 AI 客户端运行已保存的 SSH 或数据库别名
  2. 02无需复制内网主机密码即可操作堡垒后的主机
  3. 03查看命令历史并验证审计日志完整性

MCP 相关

本地 MCP 服务提供别名元数据、命令执行、设置和只读审计工具;不会暴露密码、会话令牌或 reveal 操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"furowu-brokre": {
"command": "npx",
"args": [
"-y",
"brokre"
]
}
}
}
启动命令npx -y brokre

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmbrokre0.2.36

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

brokre — AI 安全的凭据代理

English | 简体中文

brokre 是一款面向 AI Agent 和人类的本地凭据代理。将它与 Cursor、Claude Code、Kimi Code、Trae、OpenClaw、Hermes Agent、ChatClaw 及其他支持 MCP 的客户端搭配使用,可运行 ssh、mysql、psql 等命令——密码绝不会进入 AI 上下文、环境变量或 ps 输出。它可以包装**PATH 中的任意 CLI**,而不仅限于 SSH 或 MySQL,并在提示输入密码时注入已保存的密码,不会向 AI 进程、Shell 历史记录或进程环境暴露明文。

由 Techinone(成都同创合一科技有限公司)开发。

0.2.17 新增内容

0.2.17 是当前版本:默认通过 SessionRelay 路由 SSH、支持多跳堡垒机路由、默认仅列出本地项目,并保留现有的一条命令完成 npm 安装 / 自动注册 MCP / 自动升级二进制文件流程。

npm — 安装、自动更新、自动设置 MCP
npm install -g brokre          # or: npx -y brokre@latest
功能实际效果
自动注册 MCPpostinstall 会运行 brokre-setup-mcp——仅检测已安装的 IDE,并将 npx -y brokre@latest 合并到每个 IDE 的全局 MCP 配置中。重新运行:brokre mcp setup 或 npx brokre-setup-mcp。跳过:BROKRE_MCP_SKIP_SETUP=1。
自动升级二进制文件每次启动 MCP 时,将 npm 包版本与 PATH / ~/.brokre/bin/brokre 中的版本进行比较;缺失或版本较旧时,下载对应的 GitHub Release。
无需 npm 的 CLI对于 install.sh 用户,可使用 brokre version / brokre upgrade;安装 IDE 后,使用 brokre mcp setup 注册 MCP。
支持的 IDECursor、VS Code、VS Code Insiders、Claude Code、Claude Desktop、Trae、Kimi Code、Windsurf、OpenClaw、Codex CLI、Gemini CLI、Hermes Agent、Continue、Zed——详见 packages/brokre-mcp/README.md。

推荐的 MCP 配置(自动设置也会应用此配置):

{ "command": "npx", "args": ["-y", "brokre@latest"] }
堡垒机代理 — 集群管理

堡垒机层让 AI Agent 无需将保险库密码复制到上下文中,也无需在笔记本电脑上散落机密,即可操作一台跳板机后面的多台主机。

优势实际意义
单一控制平面注册堡垒机 SSH 别名(b150),从远程 brokre 同步内部别名,并通过 brokre list / MCP brokre_list 管理整个集群
智能路由b150::db、b150::app-01、多跳路由 b1::b2::inner——路由分隔符为 ::;默认通过 SessionRelay 路由 SSH
机密留在堡垒机上路由执行会在跳板机上运行 ~/.brokre/bin/brokre;笔记本电脑只保存元数据和会话门控信息,不保存内部主机密码
人工门控,适合 Agent 使用堡垒机出站连接需要解锁(TTY、/bastion-auth 或 MCP URL 询问);门控认证不会因管理界面空闲超时而失效,因此长时间运行的 MCP 仍可正常工作
保障集群安全的默认设置默认仅列出本地项目;明确请求堡垒机发现;使用毫秒级超时和并发上限进行可达性探测;进行循环检测,并在审计中记录 route / bastion 字段
通过路由执行特权操作brokre_exec_elevated 和 sudo / sudo -i 路径可通过堡垒机工作,并支持会话复用和 PTY 加固

通过一个入口主机访问 K8s / DB / 批处理集群的典型流程:

brokre bastion enable b150
brokre bastion sync b150 --json          # pull inner alias catalog
brokre bastion unlock
brokre list --include-bastions --json    # b150::db, b150::worker-01, …
brokre ssh b150::db systemctl status   # MCP: brokre_exec with routed alias

对应的 MCP 流程:

{ "binary": "ssh", "args": ["b150::db", "uname", "-a"] }

门控策略(默认与严格)——详见下文的堡垒机门控策略。在执行 brokre bastion set-key 之前,门控处于非激活状态;之后,默认仅对堡垒机出站路径要求解锁;严格模式要求每次执行操作前都解锁,同时仍仅列出本地项目,除非明确请求发现堡垒机。

设置详情请参阅下文的跨网络列表继承和堡垒机代理。

CLI 安全(核心)

brokre 围绕一条规则构建:密钥不会落入 AI 触及范围,也不会出现在可观测的进程状态中。

层级brokre 的处理方式
不泄漏到环境变量 / ps通过 PTY 提示词注入——密码绝不会通过 -p、SSHPASS、MYSQL_PWD 或导出的环境变量传递
父进程绝不持有明文(Unix)保存的密码会在短生命周期的 brokre --internal-injector 子进程中解密,写入 PTY 一次后,子进程随即退出
AI 无法执行 revealbrokre reveal 需要真实的 TTY 和主密码;网页 UI 中不可用,且不会通过 MCP 暴露
静态加密的保险库每个字段均使用 AES-256-GCM;DEK 使用 OS 密钥环(Linux)或 ~/.brokre/.master_kek(macOS)进行封装,并可选用 Argon2id 揭示密码
审计位于 ~/.brokre/audit/audit.log 的 HMAC 链式 JSONL;brokre audit list 查询历史记录(仅元数据);brokre audit verify 检测篡改
MCP 边界MCP 暴露元数据(brokre_list)、执行功能(brokre_exec、brokre_exec_elevated)、brokre_setup 和只读审计(brokre_audit_list、brokre_audit_verify)——不暴露密码、会话令牌或 reveal
管理 UI仅绑定到 127.0.0.1;密码为只写;提供用于查看历史记录的审计日志标签页;会话令牌会显示在你的终端中,绝不会返回给 AI
OS 加固禁用核心转储、进行 ptrace 检查(Linux),并可选启用 mlockall——请参阅 docs/HARDENING.md

完整威胁模型:SECURITY.md、THREAT_MODEL.md。

支持 PATH 中的任意 CLI(通用设计)

brokre 不是一组固定的数据库 / SSH 封装工具。其核心模型是:

brokre <any-cli-on-PATH> [args...]

首次连接:原样运行,在你于提示符处输入密码时捕获密码,并询问是否将其保存为别名。
下次使用时:brokre <cli> <alias> … 会自动注入密码——AI 和脚本只能看到别名。

预设提示词模式适用于常见工具(ssh、mysql、psql、redis-cli、ftp、clickhouse、git、docker、kubectl、sudo 等)。其他所有工具使用通用的 password: / passphrase: 匹配器——无需更改代码。

brokre gsql prod-cluster -c "SELECT 1"    # any proprietary CLI on PATH
brokre kubectl get pods                   # if your cluster CLI prompts for a password
brokre my-internal-tool --host db.internal

按需自定义:

  • ~/.brokre/prompts.toml — 按二进制文件设置提示词正则表达式覆盖项
  • ~/.brokre/manage.toml — 在管理 UI 中添加自定义分区(例如 GaussDB、内部工具)

内置管理 UI 标签页(安装了对应二进制文件时可用)包括 SSH、FTP、MySQL、PostgreSQL、Redis、ClickHouse、MinIO——仅为方便使用;PTY 封装器适用于任意 CLI。

安装(优先使用 MCP — 推荐用于 AI)

npm 包 brokre 会通过 stdio 启动本地 brokre mcp 服务,供 Cursor、Claude Code、Kimi Code、Trae、OpenClaw、Windsurf、VS Code 和其他 MCP 客户端使用。

选择安装方式
方式最适合安装IDE 中的 MCPCLI 升级
npm(推荐)AI 用户;希望使用一条命令npm install -g brokre安装时自动配置(postinstall)npm + 每次启动 MCP 时自动下载
install.sh / Homebrew生产环境;日常使用无需 Nodecurl … | bash 或 brew install brokre安装 IDE 后运行 brokre mcp setupbrokre version / brokre upgrade
手动配置 MCP JSON仅适用于自定义布局已安装 CLI 或 npm手动编辑 IDE 配置取决于 CLI 的安装方式

推荐的 MCP 配置项(自动配置也会写入此项):

{ "command": "npx", "args": ["-y", "brokre@latest"] }

不使用 Node — 将 MCP 指向原生二进制文件:{ "command": "brokre", "args": ["mcp"] }。

路径 A — npm 一行命令(0.2.8+)
npm install -g brokre
# or without global install:
npx -y brokre@latest

Windows: npm install -g brokre,打开新的终端,然后运行 brokre --version(首次运行时,如有需要会下载原生 CLI)。本地执行 npm i brokre(不带 -g)不会将其加入 PATH。

执行 npm install 时,会自动完成以下三件事:

  1. MCP 启动器 — brokre-mcp / npx -y brokre@latest 会启动 brokre mcp。
  2. IDE 自动注册 — postinstall 会运行 brokre-setup-mcp:仅检测已安装的 IDE(应用、CLI 或实际使用痕迹,不包括空文件夹),并将上述 MCP 条目合并到各 IDE 的全局配置中。此操作可重复执行,不会覆盖其他 MCP 服务。
  3. 二进制文件自动升级 — 每次启动 MCP 时,如果 PATH 或 ~/.brokre/bin/brokre 中的版本早于 npm 软件包版本,就会下载对应的 GitHub Release。

自动设置支持的 IDE

IDE全局配置
Cursor~/.cursor/mcp.json
VS Code / Insiders…/Code/User/mcp.json
Claude Code~/.claude.json
Claude Desktop…/Claude/claude_desktop_config.json
Trae…/Trae/User/mcp.json
Kimi Code~/.kimi-code/mcp.json
Windsurf~/.codeium/windsurf/mcp_config.json
OpenClaw~/.openclaw/openclaw.json(mcp.servers)
Codex CLI~/.codex/config.toml(mcp_servers.brokre)
Gemini CLI~/.gemini/settings.json
Hermes Agent~/.hermes/config.yaml(mcp_servers)
Continue~/.continue/config.yaml 或 ~/.continue/mcpServers/brokre.yaml
Zed~/.config/zed/settings.json(context_servers)
ChatGPT Desktop(不支持 — 仅支持远程 Connectors UI)
Grok Bot(信息提示 — connectors/plugins;没有 mcp.json)

重新运行注册(例如,先安装 brokre,之后才安装 Cursor):

brokre mcp setup              # via CLI — same logic as postinstall
npx brokre-setup-mcp          # via npm
brokre mcp setup --dry-run    # preview only
brokre mcp setup --force      # overwrite existing brokre entry

跳过 npm install 时的自动注册:BROKRE_MCP_SKIP_SETUP=1。禁用二进制文件自动下载:BROKRE_SKIP_AUTO_INSTALL=1。指定二进制文件:BROKRE_BIN=/path/to/brokre。

使用 npm 方式需要 Node.js 18+。

路径 B — 原生 CLI(install.sh / Homebrew,无需 npm)
curl -fsSL https://raw.githubusercontent.com/Furowu/brokre/main/install.sh | bash
brew tap Furowu/brokre
brew install brokre

版本与升级(CLI 内置功能 — 无需 npm):

brokre version                # version, binary path, install type
brokre version --check        # compare with latest GitHub release
brokre version --check --json
brokre upgrade                # download latest release (curl + tar)
brokre upgrade --check        # exit 1 if an update is available
brokre upgrade 0.2.10         # install a specific version
brokre upgrade --force        # reinstall even when up to date

如果有更新版本,重新运行 install.sh 也会执行升级。

安装 CLI 后注册 MCP(设置脚本需要 Node,或使用 npx 后备方案):

brokre mcp setup
按 IDE 手动设置(可选)

仅在跳过自动设置或需要项目级配置时使用。

Cursor — 一键安装,或编辑 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "brokre": { "command": "npx", "args": ["-y", "brokre@latest"] }
  }
}

Claude Code — 在 ~/.claude.json 中设置用户级配置,或运行 claude mcp add --scope user brokre -- npx -y brokre@latest。项目级配置:在 .mcp.json 中设置 "type": "stdio"。

更多客户端和环境变量:packages/brokre-mcp/README.md。MCP Registry ID:io.github.Furowu/brokre。

MCP 工具与用法
MCP 工具用途
brokre_list默认列出已保存的本地别名;设置 include_bastions=true 可发现路由别名(b150::db),可能需要解锁堡垒机;包含 access/availability/bastion_gate
brokre_exec运行已保存的任意 CLI 别名(binary + args);ssh 支持使用 shell_command 执行远程脚本;ssh + sudo/su 会自动复用提升权限的会话
brokre_exec_elevated执行远程特权命令(alias、command、mode);默认 session=reuse(空闲超时 10 min)
brokre_setup在浏览器中打开管理界面,供用户添加凭据
brokre_audit_list查询审计历史记录(仅元数据 — 参数已隐藏)
brokre_audit_verify验证防篡改审计日志链
brokre_bastion_policy读取或设置堡垒机门控模式(default / strict);返回 key_set、unlocked
MCP 与 CLI(对 AI Agent 至关重要)

brokre 不能直接替代 ssh / mysql——必须在命令前加上 brokre,才能注入保险库凭据。

任务MCP(在 IDE 中)CLI(终端 / 调试)
列出别名brokre_listbrokre list --json
SSH 远程命令brokre_exec binary=ssh,args=["prod","uname","-a"]brokre ssh prod uname -a
任意 CLIbrokre_exec binary=mysql,args=["prod-db","-e","SHOW TABLES"]brokre mysql prod-db -e "SHOW TABLES"
写入远程脚本shell_command="…"(仅限 ssh)brokre ssh prod sh -c '…'
特权执行brokre_exec_elevated command="…"brokre ssh prod sudo …(MCP 有会话池;CLI 每次都会使用新的 PTY)
添加凭据brokre_setup(打开浏览器)brokre manage --open
首次保存不可用(需要人工 TTY)brokre ssh [email protected]

常见错误(AI Agent)

错误正确
ssh prod uptimebrokre ssh prod uptime
MCP args=["prod","uname -a"](一个 shell 字符串)args=["prod","uname","-a"](argv 参数)
MCP args=["prod","sh -c 'echo hi'"]shell_command="echo hi" 或 args=["prod","sh","-c","echo hi"]
直接使用 mysql -h … -pbrokre mysql <saved-alias> …
brokre ssh alias sudo -n …(sudo-rs 等)brokre ssh alias sudo … 或 brokre_exec_elevated——绝不要使用 -n
在 heredoc 中使用 brokre ssh 会吞掉脚本输入升级后,探测命令(test/uname/bash -c)会自动断开 stdin;如需强制断开,请使用 -n/--no-stdin
brokre ssh alias bash -c 'echo "$1"' _ val(修复此引号问题前,$1 为空)将 args 拆分为 bash、-c、echo "$1"、_、val——brokre 会为脚本参数加引号。嵌套引号仍然有效。也可以使用 shell_command 或环境变量

对于远程 SSH:别名之后的参数是 argv 片段,而不是一个 shell 命令。简单命令请使用拆分后的参数;复杂脚本请使用 shell_command。

**OpenSSH 远程引号处理:**当连接目标之后有 两个或更多 argv 参数时,brokre 会在调用 ssh 前添加 shell 引号,避免 OpenSSH 将以空格拼接的远程命令拆分(例如包含空格、制表符、引号的脚本)。只有 一个 远程参数时,brokre 会原样保留——例如,brokre ssh host 'cd /tmp && ls' 仍会由远程登录 shell 解析。拆分后的 argv 参数(例如 *.log 或 $VAR)不会在远程展开;请将 glob/变量放入 shell_command 或单个 shell 字符串中。多跳堡垒机路由需要在内层 brokre 中使用此修复;单跳 直接内层 通过本地双重转义即可处理。

stdin / stdout(自动化脚本)

  • 根据意图路由:非消费型远程命令(test、uname、mkdir、bash -c '…' 等)会自动断开 stdin(heredoc 中无需 -n);消费型命令(cat、tee、tar、dd、mysql、psql、直接运行的 bash/sh)会转发 stdin——cat file | brokre ssh … 'cat > path' 无需任何额外标志即可正常工作。
  • 非上传远程命令默认使用管道模式(stdout 稳定);MCP brokre_exec 始终会断开 stdin。
  • 读取 stdin 的自定义工具:brokre ssh --with-stdin alias /path/to/tool。
  • 显式断开:brokre ssh -n alias cmd、brokre ssh --no-stdin alias cmd。
  • 恢复为旧版行为:BROKRE_SSH_LEGACY_STDIN=1(可选同时设置 BROKRE_SSH_AUTO_NULL_STDIN=1)。
  • sudo:使用 brokre ssh alias sudo cmd 或 MCP brokre_exec_elevated;sudo-rs 上的 sudo -n 是非交互式的,brokre 无法注入密码。
MCP 提权会话(sudo / su,Unix)

默认情况下,brokre mcp 会为每个 (alias, mode, user) 复用一个后台提权 shell,因此不会在每次调用时都重新提示输入 sudo 密码。

brokre_exec_elevated(推荐用于提权):

{
  "alias": "prod",
  "command": "systemctl status nginx",
  "mode": "sudo_login",
  "session": "reuse"
}
字段描述
modesudo、sudo_login(或 sudo-i)、su
sessionreuse(默认)、new(关闭旧会话并打开新会话)、close(结束会话;传入 command: "")
user仅适用于 su 模式;默认为 root

启用会话池时,响应除了包含 exit_code / stdout / stderr 外,还会包含 session_reused 和 session_idle_expires_at。session_idle_expires_at 是一个滚动空闲窗口提示,每次调用时都会刷新,并非固定的过期时间戳。使用会话池时,stderr 通常为空。stdout 仅包含远程命令输出——TTY 回显、__BROKRE_* 框架内容和 shell 提示符都会被剥除。

brokre_exec:在 args 中使用 binary=ssh 并搭配 sudo / su 时,会自动使用同一个会话池(始终为 reuse;不支持 session=new|close)。示例:args=["prod","sudo","whoami"]。

编写远程脚本/文件(仅适用于 shell_command、binary=ssh):在 args 中仅传入别名;将完整 shell 脚本放在 shell_command 中(brokre 会规范化为 sh -c)。Brokre 会在 OpenSSH 传输前为包含多个词元的远程 argv 添加引号,使包含空格/制表符的 -c 脚本能够正常传输;单个远程词元则保持不变。不要在 args 中嵌入 sh -c '...',也不要将 printf / 重定向拆分到多个 argv 词元中。对于特权系统路径,请使用 brokre_exec_elevated.command。

{
  "binary": "ssh",
  "args": ["prod"],
  "shell_command": "cat > /tmp/deploy.sh <<'EOF'\n#!/bin/sh\necho ok\nEOF"
}

堡垒机路由的用法相同:args=["b150::db"],并将远程脚本放在 shell_command 中。

SessionRelay 隧道(默认)

brokre ssh b150::db 默认使用 SessionRelay 路径:笔记本通过 SSH 在 b150 上启动 brokre tunnel agent --stdio,然后由 Agent 在堡垒机上运行 brokre ssh db。多跳路由会由每个 Agent 逐跳处理(b1::b2::db 会先在 b1 上启动,然后由 b1 继续处理 b2::db)。内层凭据保留在堡垒机的保管库中;笔记本只转发终端字节。BROKRE_TUNNEL=0 是用于紧急回滚的临时旧版回退选项。

brokre tunnel doctor b150
brokre ssh b150::db uname -a

路由 SSH 的 MCP brokre_exec 响应会包含 tunnel: { mode, active }。TcpForward、端点同步、Manage UI 隧道控制和持久化 tunneld 属于后续阶段。

控制项默认值
空闲后拆除10 分钟
最长生命周期30 分钟
单条命令超时120 秒
变量默认值含义
BROKRE_MCP_SESSION10 会禁用会话池;改用一次性子进程执行
BROKRE_MCP_SESSION_IDLE_SECS600空闲超时(秒)
BROKRE_MCP_SESSION_MAX_SECS1800会话最长生命周期(秒)
BROKRE_MCP_SESSION_CMD_TIMEOUT120远程命令超时(秒)

不支持:不带命令的交互式 sudo -i、vim / top,或与保管库 password 字段不同的 sudo 密码。请参阅 THREAT_MODEL.md T12。

首次连接时,如果保管库为空,brokre 会在浏览器中打开 manage(http://127.0.0.1:56777/?t=…)。会话令牌仅保留在 localhost 上,绝不会返回给 AI。设置 BROKRE_MCP_NO_AUTO_OPEN=1 可禁用自动打开。

| MCP 工具 | 用途 |

添加凭据

安装 CLI 后,管理器会在首次运行时打开(brokre manage --onboard --open)。也可随时运行:

brokre manage --open

或者在首次交互式连接时保存(任何 CLI 均可):

brokre ssh [email protected]
brokre my-tool --host internal.corp
使用(对 AI 安全)
brokre mysql prod-db -e "SHOW TABLES"
brokre ssh prod-bastion uname -a
brokre <your-cli> <alias> [args...]
列出元数据(适用于 AI / 脚本)
brokre list --json              # local aliases with reachability status (default probe)
brokre list --no-probe --json   # metadata only, skip TCP/SSH probes
brokre list --reachable-only    # hide unavailable aliases
brokre list --all --json        # compat: show all (same as default unless --reachable-only)
brokre list --no-bastion-discovery   # local only — no bastion SSH discovery

注册堡垒机后,brokre list 默认仍仅在本地运行,不会通过 SSH 连接堡垒机,也不会触发堡垒机解锁。只有在确实需要 b150::db 这类路由别名时,才使用 brokre list --include-bastions(MCP:include_bastions=true);此远程发现操作可能需要解锁。

OpenSSH 会话默认注入 ConnectTimeout=5(BROKRE_SSH_CONNECT_TIMEOUT)。可通过 -o ConnectTimeout=N 或环境变量覆盖。堡垒机 RPC(brokre list --include-bastions / 远程列表)的超时时间为 60 秒(BROKRE_BASTION_RPC_TIMEOUT)。远程命令使用 ControlPath=none,因此不会连接到 ControlPersist 多路复用主连接。

跨网络列表继承(堡垒机代理)

适用于跨网络访问——旅行、VPN、公网入口等场景:本地无法访问直接 LAN 别名,但运行 brokre 的堡垒机可以访问这些别名。

前提条件

  1. 笔记本:brokre bastion enable b150(b150 是已保存的 SSH 别名)
  2. 堡垒机主机在 ~/.brokre/bin/brokre 运行 brokre(标准安装 / npx 路径),并已保存内部别名(例如 db)

路由列表

brokre bastion unlock            # if bastion key is set
brokre list --include-bastions   # includes b150::db (route=b150, access=via_b150)

跨网络时,需要路由别名时使用 --include-bastions。普通的 brokre list 仍仅在本地运行,不会解锁堡垒机,也不会通过 SSH 连接堡垒机。

执行

brokre ssh b150::db uname -a
# MCP: brokre_exec binary=ssh, args=["b150::db", "uname", "-a"]

当两种路径都可用时,列表会同时显示 db(direct)和 b150::db(via_b150)——根据 access 区分。

堡垒机代理(跨网络 / 内网入口)

将任意远程主机上运行 brokre 的已保存 SSH 别名提升为堡垒机代理。密钥保留在堡垒机上;笔记本缓存元数据,并通过 SSH 透传执行命令。

brokre bastion enable b150        # register ssh alias b150 as bastion
brokre bastion set-key              # set bastion unlock key (TTY)
brokre bastion unlock               # unlock outbound session (TTL, 30 min idle default)
brokre list --include-bastions --json # discover bastion-routed aliases
brokre ssh b150::db uname -a        # routed exec via b150 remote brokre
brokre bastion sync b150 --json     # fetch alias list from one bastion
  • 路由分隔符为 ::(别名名称中不能使用 :):db(本地)、b150::db(经由堡垒机)、b1::b2::inner(多跳,默认深度 ≤2)。
  • 远程 brokre:路由执行会在堡垒机上调用 ~/.brokre/bin/brokre(无头 Linux 上使用 BROKRE_SOFT_MEMLOCK=1、BROKRE_ALLOW_FILE_KEYCHAIN=1、BROKRE_ROUTED_INNER=1)。交互式命令(例如 sudo -i)会自动添加 -tt。
  • 防护措施:探测并发上限、毫秒级超时、短缓存、循环检测、审计 route/bastion(HMAC v4)。
  • 管理界面:brokre manage 的 Bastion 标签页——注册/禁用堡垒机、通过 Web 设置密钥和解锁/锁定、切换严格模式、同步远程别名;非 TTY 环境下仍会自动打开 /bastion-auth。审计标签页支持按 bastion/source 筛选,并显示路由字段。
Bastion 门禁策略(默认模式与严格模式)

Bastion 门禁是在敏感操作前由人工执行的解锁步骤。设置 Bastion 密钥前,门禁处于关闭状态(brokre bastion set-key)。设置密钥后,解锁会建立一个本地 TTL 会话(brokre bastion unlock、TTY 密码短语、管理界面 /bastion-auth 或 MCP 浏览器引导)。

策略存储在 ~/.brokre/bastion/policy.json(strict_mode,默认值为 false)。

模式gate_mode何时需要解锁(必须已设置密钥)
默认default仅限 Bastion 出站操作——路由到 b150::inner 的 exec;通过 SSH/scp/sftp 连接到已注册的 Bastion 别名;当 Bastion 发现功能通过 SSH 连接到 Bastion 时,执行 brokre list / brokre_list。纯粹的本地 exec(例如 brokre ssh lan-db)不需要解锁。
严格strict每次 brokre exec / MCP brokre_exec 都需要解锁;仅获取元数据的 brokre list 仍只在本地执行,而 --include-bastions 仍需要解锁。如果配置了 Bastion 密钥,并且希望 Agent 执行操作时有人参与,可使用此模式。

示例(默认模式,已设置密钥,会话处于锁定状态)

操作是否需要解锁?
brokre ssh prod uname -a(本地别名)否
brokre ssh b150::db uname -a是
brokre ssh b150 uptime(已注册的 Bastion)是
brokre list --include-bastions是
brokre list(仅本地)否

在严格模式下,exec 行操作需要解锁;仅获取元数据的 brokre list 仍只在本地执行,除非使用 --include-bastions,否则不会解锁。

设置门禁模式

brokre bastion strict status    # default | strict
brokre bastion strict on        # strict — all exec gated; list stays local-only unless discovery is requested
brokre bastion strict off       # default — bastion outbound only
界面方式
CLIbrokre bastion strict on|off|status
管理界面Bastion 选项卡 — 严格模式开关
MCPbrokre_bastion_policy — 读取当前策略,或传入 {"strict_mode": true} / false

MCP 读取响应包含 strict_mode、gate_mode、key_set、unlocked。列表/exec 响应包含 bastion_gate(required、unlocked_during_call、idle_expires_at)。

解锁会话 TTL(默认值):空闲 30 分钟(BROKRE_BASTION_IDLE_SECS),最长有效期 8 小时(BROKRE_BASTION_MAX_SECS)。解锁状态下,每次调用受门禁保护的操作都会续期空闲时长(CLI、MCP 和管理界面共用 ~/.brokre/run/bastion_session.json)。Bastion 门禁身份验证独立于管理界面会话的空闲超时。禁用 MCP 解锁时自动打开浏览器:BROKRE_BASTION_NO_AUTO_OPEN=1。

显示 / 删除(仅限人工操作,需真实 TTY)
brokre reveal mysql prod-db --field password
brokre rm ssh prod-bastion
审计日志(仅元数据)
brokre audit list --profile ssh --action exec --json
brokre audit verify --json

事件存储在 ~/.brokre/audit/audit.log(采用 HMAC 链式校验)。命令参数统一脱敏为 <REDACTED>。新事件包含 source 字段(cli、mcp 或 manage)。管理界面的审计日志选项卡和 MCP brokre_audit_list 会显示相同的元数据。

管理界面安全性
  • 仅限 127.0.0.1;会话令牌显示在终端中
  • 密码:仅可创建 / 轮换——无读取 API
  • 删除 / 轮换需要显示密码短语(自动保存的记录则输入 YES)
  • 空闲超时为 15 分钟

架构

┌─────────┐     ┌──────────┐     ┌─────────────┐     ┌────────────┐
│ AI/User │────▶│ brokre CLI│────▶│ OS Keychain │────▶│ Vault File │
└─────────┘     └──────────┘     └─────────────┘     └────────────┘
                      │
                      ▼
               ┌─────────────┐
               │  PTY + inj. │──▶ any CLI on PATH (ssh, mysql, gsql, …)
               └─────────────┘
  • 双重加密:每个字段使用唯一的 DEK;分别为 exec 和 reveal 封装。
  • 保管库元数据:profile、name、host_alias、saved_args 以明文形式与密文并存(THREAT_MODEL.md T3)。
  • SSH 私钥:会话期间使用 0600 临时文件 + -i(docs/HARDENING.md)。

预设管理界面分组

二进制文件位于 PATH 时显示的便捷选项卡:

分组二进制文件
SSHssh、scp、sftp(共用凭据)
FTPftp、lftp
MySQLmysql、mariadb
PostgreSQLpsql、postgres
Redisredis-cli、redis
ClickHouseclickhouse-client、clickhouse
MinIOmc、minio

路线图

当前: 通用 PTY 包装器 + manage.toml 分组 + prompts.toml 覆盖项。

计划中: 在 ~/.brokre/profiles/ 下提供完整的 TOML 连接器配置文件,并支持按工具设置注入策略。

管道 stdin 和 OpenSSH 共享

  • 管道 stdin(tar | brokre ssh host 'tar xf -'):注入完成后才会转发管道数据。
  • OpenSSH 系列(ssh、scp、sftp):主机匹配时,共享已保存的凭据。首次保存需进行交互操作(TTY)。

开发

cargo test    # unit tests in src/ only (no tests/ integration suite in this repo)
cargo clippy --all-targets --all-features -- -D warnings
cargo build --release   # binary: target/release/brokre

发布版本在 VERSION 中声明(也反映在 Cargo.toml 和 packages/brokre-mcp/package.json 中)。官方二进制文件和 npm 包由 TechinOne 通过 GitHub Releases 和 CI 发布,不属于此开源代码树。

许可证

MIT — 参见 LICENSE。


Techinone · 成都同创合一科技有限公司

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。