brokre について
brokreは、パスワードが必要なコマンドラインツールを実行するAIエージェントやユーザー向けのローカル認証情報ブローカーです。ターミナルのプロンプトで保存済み認証情報を注入し、平文パスワードがAIのコンテキストや観測可能なプロセス状態に残るのを防ぎます。
主な機能
- 01プロンプトでのパスワード注入
- 02PATH上の任意のCLIをラップ
- 03暗号化された認証情報ボルト
- 04検証可能な監査ログ
- 05SSHホストの踏み台ルーティング
活用シーン
- 01AIクライアントから保存済みSSHやデータベースのエイリアスを実行
- 02踏み台の先のホストを内部パスワードのコピーなしで操作
- 03コマンド履歴の確認と監査ログの完全性検証
MCP 対応
ローカルMCPサーバーは、エイリアスのメタデータ、コマンド実行、セットアップ、読み取り専用の監査ツールを公開します。パスワード、セッショントークン、reveal操作は公開しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
brokre — AI に安全な認証情報ブローカー
English | 简体中文
brokre は、AI エージェントと人間のためのローカル認証情報ブローカーです。Cursor、Claude Code、Kimi Code、Trae、OpenClaw、Hermes Agent、ChatClaw などの MCP 対応クライアントで使用すると、ssh、mysql、psql などを実行できます。パスワードが AI のコンテキスト、環境変数、ps の出力に入ることはありません。SSH や MySQL だけでなく、PATH 上の任意の CLI をラップし、平文を AI プロセス、シェル履歴、プロセス環境に公開せずに、プロンプトで保存済みパスワードを入力します。
Techinone(成都同创合一科技有限公司)が開発しました。
0.2.17 の新機能
0.2.17 は現在のリリースです。SessionRelay による SSH のデフォルトルーティング、マルチホップ踏み台ルート、デフォルトでローカルのみを一覧表示に対応し、従来のワンコマンドでの npm インストール/MCP の自動登録/バイナリの自動アップグレードのフローも利用できます。
npm — インストール、自動更新、MCP の自動セットアップ
npm install -g brokre # or: npx -y brokre@latest
| 機能 | 動作 |
|---|---|
| MCP の自動登録 | postinstall が brokre-setup-mcp を実行し、インストール済みの IDE のみを検出して、各 IDE のグローバル MCP 設定に npx -y brokre@latest を追加します。再実行するには brokre mcp setup または npx brokre-setup-mcp を実行します。スキップするには BROKRE_MCP_SKIP_SETUP=1 を設定します。 |
| バイナリの自動アップグレード | MCP の起動ごとに、npm パッケージのバージョンと PATH/~/.brokre/bin/brokre を比較します。バイナリがない場合、または古い場合は、一致するGitHub リリースをダウンロードします。 |
| npm を使わない CLI | install.sh を使うユーザーは brokre version/brokre upgrade を使用できます。IDE のインストール後に MCP を登録するには brokre mcp setup を実行します。 |
| 対応 IDE | Cursor、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 エージェントは、ボールトのパスワードをコンテキストにコピーしたり、ノート PC 内にシークレットを散在させたりせずに、1 台の踏み台ホストの背後にある多数のホストを操作できます。
| 利点 | 実際の動作 |
|---|---|
| 単一のコントロールプレーン | 踏み台の SSH エイリアス(b150)を登録し、内側のエイリアスをリモートの brokre から同期して、brokre list/MCP brokre_list からクラスター全体を操作できます。 |
| スマートルーティング | b150::db、b150::app-01、マルチホップの b1::b2::inner を使用します。ルートの区切り文字は :: です。ルート経由の SSH はデフォルトで SessionRelay を使用します。 |
| シークレットは踏み台に保持 | ルート経由の exec は踏み台ホスト上で ~/.brokre/bin/brokre を実行します。ノート PC に保持されるのはメタデータとセッションゲートで、内側のホストのパスワードは保持されません。 |
| 人間によるゲート、エージェントにも使いやすい設計 | 踏み台からの外向き接続には、ロック解除(TTY、/bastion-auth、または MCP URL elicitation)が必要です。ゲートの認証は管理 UI のアイドル有効期限が切れても維持されるため、長時間の MCP 実行も継続できます。 |
| クラスターに安全なデフォルト設定 | デフォルトではローカルのみを一覧表示し、踏み台の検出は明示的に行います。到達可能性のプローブにはミリ秒単位のタイムアウトと同時実行数の上限を設定し、ループを検出します。監査には route/bastion フィールドが記録されます。 |
| ルート経由の特権操作 | brokre_exec_elevated と sudo/sudo -i の処理は、セッション再利用と PTY の強化により踏み台経由で動作します。 |
1 台の入口ホストの背後にある 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 を実行するまで無効です。実行後、デフォルトでは踏み台からの外向き接続だけをロック解除し、厳格ではすべての exec にロック解除を要求します。一覧表示は、踏み台の検出が要求されない限り、引き続きローカルのみです。
設定の詳細は、以下のクロスネットワーク一覧の継承と踏み台プロキシを参照してください。
CLI セキュリティ(コア)
brokre は、シークレットを AI の手の届くところにも、観測可能なプロセス状態にも置かないというルールを中心に構築されています。
| レイヤー | brokre の動作 |
|---|---|
環境変数や ps への漏えいなし | 注入には PTY のプロンプトを使用します。パスワードが -p、SSHPASS、MYSQL_PWD、エクスポートされた環境変数を介して渡されることはありません |
| 親プロセスが平文を保持しない(Unix) | 保存されたパスワードは短時間だけ動作する brokre --internal-injector 子プロセスで復号され、PTY に一度だけ書き込まれた後、子プロセスは終了します |
AI は reveal を実行できない | brokre 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 は、Cursor、Claude Code、Kimi Code、Trae、OpenClaw、Windsurf、VS Code、その他の MCP クライアント向けに、stdio 経由でローカルの brokre mcp サーバーを起動します。
インストール方法を選択
| 方法 | おすすめのユーザー | インストール | IDE での MCP | CLI のアップグレード |
|---|---|---|---|---|
| npm(おすすめ) | AI ユーザー。1 つのコマンドで済ませたい方 | npm install -g brokre | インストール時に自動設定(postinstall) | npm と、MCP の起動ごとの自動ダウンロード |
| install.sh/Homebrew | 本番環境。日常的な使用に Node を使いたくない方 | curl … | bash または brew install brokre | IDE のインストール後に brokre mcp setup を実行 | brokre 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 時に、次の 3 つが自動的に行われます。
- MCP ランチャー —
brokre-mcp/npx -y brokre@latestがbrokre mcpを起動します。 - IDE の自動登録 —
postinstallがbrokre-setup-mcpを実行します。インストール済みの IDE のみを検出し(空のフォルダーではなく、アプリ、CLI、または実際の使用を示すファイルを対象とします)、上記の MCP エントリーを各グローバル設定にマージします。冪等に実行され、他の MCP サーバーは保持されます。 - バイナリの自動アップグレード — 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 | (未対応 — リモートコネクター UI のみ) |
| Grok Bot | (情報 — コネクター/プラグインを使用。mcp.json はありません) |
登録を再実行(例:Cursor をインストールする前に 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 を実行します。プロジェクトスコープの場合は、"type": "stdio" を含む .mcp.json を使用します。
その他のクライアントと環境変数については、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 分)です |
brokre_setup | ユーザーが認証情報を追加できるよう、ブラウザーで管理 UI を開きます |
brokre_audit_list | 監査履歴を照会します(メタデータのみ — 引数は編集されます) |
brokre_audit_verify | 改ざんを検知できる監査ログチェーンを検証します |
brokre_bastion_policy | バスティオンのゲートモード(default/strict)を読み取るか設定します。key_set、unlocked を返します |
MCP と CLI(AI エージェントに必須)
brokre は ssh / mysql のそのまま置き換えられるものではありません。Vault の認証情報を注入するには、先頭に brokre を付ける必要があります。
| タスク | MCP(IDE 内) | CLI(ターミナル/デバッグ) |
|---|---|---|
| エイリアスを一覧表示 | brokre_list | brokre list --json |
| リモートで SSH コマンドを実行 | brokre_exec binary=ssh、args=["prod","uname","-a"] | brokre ssh prod uname -a |
| 任意の CLI | brokre_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 エージェント)
| 誤り | 正しい方法 |
|---|---|
ssh prod uptime | brokre ssh prod uptime |
MCP args=["prod","uname -a"](1 つのシェル文字列) | args=["prod","uname","-a"](argv トークン) |
MCP args=["prod","sh -c 'echo hi'"] | shell_command="echo hi" または args=["prod","sh","-c","echo hi"] |
mysql -h … -p をそのまま実行 | brokre mysql <saved-alias> … |
brokre ssh alias sudo -n …(sudo-rs など) | brokre ssh alias sudo … または brokre_exec_elevated — -n は絶対に使わないでください |
ヒアドキュメント内の brokre ssh がスクリプト入力を消費する | アップグレード後、プローブコマンド(test/uname/bash -c)は標準入力を自動切断します。強制するには -n/--no-stdin を使ってください |
brokre ssh alias bash -c 'echo "$1"' _ val(この引用符修正前は $1 が空) | args を bash、-c、echo "$1"、_、val に分割します。brokre がスクリプトトークンを引用符で囲みます。入れ子の引用符も引き続き使えます。shell_command や環境変数も使用できます |
リモート SSH では、エイリアスの後のトークンは1 つのシェルコマンドではなく argv のスライスです。単純なコマンドには分割したトークンを使い、複雑なスクリプトには shell_command を使ってください。
OpenSSH のリモート引用符処理: 接続先の後に argv トークンが2 つ以上ある場合、brokre は ssh の呼び出し前にシェル引用符を追加し、OpenSSH が空白で結合したリモートコマンドによってスクリプト(空白、タブ、引用符)が分割されるのを防ぎます。リモートトークンが1 つの場合、brokre は変更しません。たとえば、brokre ssh host 'cd /tmp && ls' は引き続きリモートのログインシェルによって解析されます。*.log や $VAR など、分割された argv トークンはリモートで展開されません。グロブや変数は shell_command または 1 つのシェル文字列に入れてください。マルチホップの踏み台ルートでは、この修正を含む内部の brokre が必要です。シングルホップの直接内部ルートは、ローカルでの二重エスケープにより対応しています。
標準入力/標準出力(自動化スクリプト)
- 意図に応じたルーティング:入力を消費しないリモートコマンド(
test、uname、mkdir、bash -c '…'など)は標準入力を自動切断します(ヒアドキュメントでは-n不要)。入力を消費するコマンド(cat、tee、tar、dd、mysql、psql、単独のbash/sh)は標準入力を転送します。cat file | brokre ssh … 'cat > path'は追加フラグなしで動作します。 - アップロード以外のリモートコマンドは、デフォルトでパイプモード(安定した標準出力)を使用します。MCP の
brokre_execは常に標準入力を切断します。 - 標準入力を読み取るカスタムツール:
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) ごとにバックグラウンドの昇格シェルを再利用するため、呼び出しのたびに sudo パスワードを再入力する必要はありません。
brokre_exec_elevated(権限昇格に推奨):
{
"alias": "prod",
"command": "systemctl status nginx",
"mode": "sudo_login",
"session": "reuse"
}
| フィールド | 説明 |
|---|---|
mode | sudo、sudo_login(または sudo-i)、su |
session | reuse(デフォルト)、new(古いセッションを閉じて新規に開く)、close(セッションを終了。command: "" を渡します) |
user | su モードのみ。デフォルトは root |
セッションプールが有効な場合、レスポンスには exit_code / stdout / stderr に加えて session_reused と session_idle_expires_at が含まれます。session_idle_expires_at は、呼び出しのたびに更新されるローリング方式のアイドル時間枠の目安であり、固定の有効期限タイムスタンプではありません。プールを経由する場合、stderr は通常空です。stdout にはリモートコマンドの出力のみが含まれます。TTY のエコー、__BROKRE_* のフレーミング、シェルプロンプトは除去されます。
brokre_exec:args に sudo/su を指定した binary=ssh は、同じプールを自動的に使用します(常に reuse。session=new|close は使用できません)。例:args=["prod","sudo","whoami"]。
リモートスクリプト/ファイルの書き込み(shell_command、binary=ssh のみ):args にはエイリアスのみを渡し、完全なシェルスクリプトを shell_command に指定します(brokre は sh -c に正規化します)。brokre は OpenSSH に渡す前に複数トークンのリモート argv を引用符で囲むため、空白やタブを含む -c スクリプトも転送時に保持されます。リモートトークンが 1 つの場合は変更されません。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 経由の接続を使用します。ノート PC は SSH 経由で b150 上に brokre tunnel agent --stdio を起動し、エージェントは踏み台上で brokre ssh db を実行します。マルチホップのルートでは、エージェントごとに 1 ホップずつ処理します(b1::b2::db の場合、b1 で起動し、その後 b1 が b2::db を処理します)。内部の認証情報は踏み台のボールトに保持され、ノート PC はターミナルのバイト列を中継するだけです。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_SESSION | 1 | 0 にするとプールを無効にし、単発のサブプロセス実行にフォールバックします |
BROKRE_MCP_SESSION_IDLE_SECS | 600 | アイドルタイムアウト(秒) |
BROKRE_MCP_SESSION_MAX_SECS | 1800 | セッションの最大存続時間(秒) |
BROKRE_MCP_SESSION_CMD_TIMEOUT | 120 | リモートコマンドのタイムアウト(秒) |
未対応:コマンドを指定しない対話型の sudo -i、vim/top、またはボールトの password フィールドとは異なる sudo パスワード。詳細は THREAT_MODEL.md の T12 を参照してください。
空のボールトで初めて接続すると、brokre はブラウザーで manage を開きます(http://127.0.0.1:56777/?t=…)。セッショントークンはローカルホストに保持され、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 の多重化マスターには接続しません。
ネットワークをまたぐ一覧表示の継承(踏み台ブローカー)
brokre を実行する踏み台からは到達可能でも、ローカルからは直接 LAN エイリアスに到達できない場合の、ネットワークをまたぐアクセス(出先、VPN、パブリックな入口)向けです。
前提条件
- ノート PC:
brokre bastion enable b150(b150は保存済みの SSH エイリアスです) - 踏み台ホストで brokre が
~/.brokre/bin/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 エイリアスはどれでも、踏み台ブローカーにできます。シークレットは踏み台に保存され、ノート PC ではメタデータをキャッシュし、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)。 - 管理 UI:
brokre manageの Bastion タブでは、踏み台の登録/無効化、Web でのキー設定とロック解除/ロック、厳格モードの切り替え、リモートエイリアスの同期ができます。非 TTY 環境でも/bastion-authが自動的に開きます。監査タブではbastion/sourceで絞り込み、経路フィールドを表示できます。
Bastion ゲートポリシー(デフォルトと厳格)
Bastion の ゲート は、機密性の高い操作の前に人がロックを解除する手順です。Bastion キーを設定するまでは 無効 です(brokre bastion set-key)。キーを設定すると、ロック解除によってローカル TTL セッションが確立されます(brokre bastion unlock、TTY のパスフレーズ、管理 UI の /bastion-auth、または MCP ブラウザーのエリシテーション)。
ポリシーは ~/.brokre/bastion/policy.json に保存されます(strict_mode、デフォルトは false)。
| モード | gate_mode | ロック解除が必要な場合(キーが設定されている必要があります) |
|---|---|---|
| デフォルト | default | Bastion 経由のアウトバウンドのみ — b150::inner 経由のルーティング実行、登録済み Bastion エイリアスへの SSH/scp/sftp、Bastion の検出で Bastion への SSH が発生する場合の brokre list / brokre_list。純粋な ローカル 実行(例:brokre ssh lan-db)ではロック解除は必要ありません。 |
| 厳格 | strict | すべての brokre exec / MCP brokre_exec。メタデータのみの brokre list はローカルのみで、--include-bastions を指定した場合は引き続きロック解除が必要です。Bastion キーが設定されている間、エージェントの実行に人間の確認を必須にしたい場合に使用します。 |
例(デフォルトモード、キー設定済み、セッションはロック中)
| 操作 | ロック解除が必要ですか? |
|---|---|
brokre ssh prod uname -a(ローカルエイリアス) | いいえ |
brokre ssh b150::db uname -a | はい |
brokre ssh b150 uptime(登録済み Bastion) | はい |
brokre list --include-bastions | はい |
brokre list(ローカルのみ) | いいえ |
厳格 モードでは、実行に関する項目でロック解除が必要です。メタデータのみの 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
| インターフェース | 方法 |
|---|---|
| CLI | brokre bastion strict on|off|status |
| 管理 UI | Bastion タブ — 厳格モードの切り替え |
| MCP | brokre_bastion_policy — 現在のポリシーを読み取るか、{"strict_mode": true} / false を渡します |
MCP の読み取り応答には、strict_mode、gate_mode、key_set、unlocked が含まれます。list/exec の応答には、bastion_gate(required、unlocked_during_call、idle_expires_at)が含まれます。
ロック解除セッションの TTL(デフォルト):アイドル状態で30分(BROKRE_BASTION_IDLE_SECS)、最大有効期間8時間(BROKRE_BASTION_MAX_SECS)。ロック解除中は、ゲートが必要な呼び出しのたびにアイドル時間が 更新 されます(CLI、MCP、管理 UI 間で ~/.brokre/run/bastion_session.json を共有)。Bastion ゲート認証は、管理 UI セッションのアイドル期限とは独立しています。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)が含まれます。管理 UI の 監査ログ タブと MCP の brokre_audit_list では、同じメタデータを参照できます。
管理 UI のセキュリティ
- 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)。
管理 UI のプリセットグループ
バイナリが PATH 上にある場合に利用できる便利なタブです。
| グループ | バイナリ |
|---|---|
| SSH | ssh、scp、sftp(認証情報を共有) |
| FTP | ftp、lftp |
| MySQL | mysql、mariadb |
| PostgreSQL | psql、postgres |
| Redis | redis-cli、redis |
| ClickHouse | clickhouse-client、clickhouse |
| MinIO | mc、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 パッケージは、GitHub Releases と CI を通じて TechinOne が公開しており、このオープンソースのツリーには含まれていません。
ライセンス
MIT — LICENSE をご覧ください。
Techinone · 成都同創合一科技有限公司
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。