Skip to main content
Glama

brokre — AI 안전 자격 증명 브로커

English | 简体中文

brokre는 AI 에이전트와 인간을 위한 로컬 자격 증명 브로커입니다. Cursor, Claude Code, Kimi Code, Trae, OpenClaw, Hermes Agent, ChatClaw 및 기타 MCP 지원 클라이언트와 함께 사용하여 ssh, mysql, psql 등을 실행할 수 있습니다 — 비밀번호는 AI 컨텍스트, 환경 변수 또는 ps 출력에 절대 노출되지 않습니다. PATH에 있는 모든 CLI를 래핑하며 — SSH나 MySQL뿐만 아니라 — 프롬프트에서 저장된 비밀번호를 주입하되 평문을 AI 프로세스, 셸 히스토리 또는 프로세스 환경에 노출하지 않습니다.

Techinone(成都同创合一科技有限公司)이 개발했습니다.

0.2.17의 새로운 기능

0.2.17이 현재 릴리스입니다: SessionRelay 라우팅 SSH 기본 적용, 멀티홉 배스천 라우트, 로컬 전용 목록 기본 적용, 그리고 기존의 원커맨드 npm 설치 / 자동 MCP 등록 / 자동 바이너리 업그레이드 흐름을 포함합니다.

npm — 설치, 자동 업데이트, 자동 MCP 설정

npm install -g brokre          # or: npx -y brokre@latest

기능

동작 방식

자동 MCP 등록

postinstallbrokre-setup-mcp를 실행 — 설치된 IDE만 감지하고 npx -y brokre@latest를 각 글로벌 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 등록.

지원 IDE

Cursor, VS Code, VS Code Insiders, Claude Code, Claude Desktop, Trae, Kimi Code, Windsurf, OpenClaw — packages/brokre-mcp/README.md 참조.

권장 MCP 설정(자동 설정에서도 적용):

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

배스천 브로커 — 클러스터 관리

배스천 계층을 통해 AI 에이전트는 점프 박스 하나 뒤의 많은 호스트를 운영할 수 있으며, 볼트 비밀번호를 컨텍스트에 복사하거나 노트북에 시크릿을 흩뿌릴 필요가 없습니다.

장점

실제 의미

단일 제어 평면

배스천 SSH 별칭(b150)을 등록하고, 원격 brokre에서 내부 별칭을 동기화하며, brokre list / MCP brokre_list로 전체 클러스터를 제어합니다.

스마트 라우팅

b150::db, b150::app-01, 멀티홉 b1::b2::inner — 라우트 구분자 ::; 라우팅 SSH는 기본적으로 SessionRelay 사용.

시크릿은 배스천에 유지

라우팅 실행은 점프 호스트에서 ~/.brokre/bin/brokre를 실행합니다. 노트북에는 내부 호스트 비밀번호가 아닌 메타데이터와 세션 게이트만 보관됩니다.

인간 게이트, 에이전트 친화적

배스천 아웃바운드는 잠금 해제(TTY, /bastion-auth, 또는 MCP URL 유도)가 필요합니다. 게이트 인증은 관리 UI 유휴 만료를 넘어 유지되므로 긴 MCP 실행이 계속 작동합니다.

클러스터 안전 기본값

기본적으로 로컬 전용 목록; 명시적 배스천 탐색; ms 타임아웃과 동시성 상한이 있는 도달 가능성 프로브; 루프 감지 및 감사 route/bastion 필드.

라우트를 통한 권한 작업

brokre_exec_elevatedsudo/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"] }

게이트 정책(기본 vs 엄격) — 아래 배스천 게이트 정책 참조. 게이트는 brokre bastion set-key 전까지 비활성화됩니다. 이후 기본은 배스천 아웃바운드 경로만 잠금 해제하고, 엄격은 배스천 탐색이 요청되지 않는 한 목록이 로컬 전용으로 유지되는 동안 모든 실행에 잠금 해제가 필요합니다.

설정 세부 사항은 아래 교차 네트워크 목록 상속배스천 프록시를 참조하세요.

Related MCP server: SSH Vault MCP

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 reveal 패스프레이즈로 래핑됩니다.

감사

~/.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), 선택적 mlockalldocs/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 사용자; 원커맨드 선호

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

npm install 시 세 가지가 자동으로 발생합니다:

  1. MCP 런처brokre-mcp / npx -y brokre@latestbrokre mcp를 실행합니다.

  2. IDE 자동 등록postinstallbrokre-setup-mcp를 실행: 설치된 IDE만 감지(앱, CLI 또는 실제 사용 아티팩트 — 빈 폴더 아님)하고 위의 MCP 항목을 각 글로벌 설정에 병합합니다. 멱등적이며 다른 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)

등록 다시 실행(예: brokre를 Cursor보다 먼저 설치한 후 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 vs CLI (AI 에이전트에 필수)

brokre는 ssh / mysql대체 도구가 아닙니다 — 볼트 주입을 위해 반드시 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 '…' (전체 스크립트를 하나의 -c 인자로)

권한 실행

brokre_exec_elevated command="…"

brokre ssh prod sudo … (MCP는 세션 풀 사용, CLI는 매번 새 PTY 사용)

자격 증명 추가

brokre_setup (브라우저 열림)

brokre manage --open

최초 저장

사용 불가 (사람 TTY 필요)

brokre ssh user@10.0.0.1

흔한 실수 (AI 에이전트)

잘못된 사용

올바른 사용

ssh prod uptime

brokre ssh prod uptime

MCP args=["prod","uname -a"] (하나의 셸 문자열)

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> …

원격 SSH의 경우: 별칭 뒤의 토큰은 argv 조각이지 하나의 셸 명령이 아닙니다. 단순 명령에는 분할 토큰을 사용하고, 복잡한 스크립트에는 shell_command를 사용하세요.

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_reusedsession_idle_expires_at이 포함됩니다. session_idle_expires_at은 고정 만료 타임스탬프가 아니라 호출마다 갱신되는 롤링 유휴 창 힌트입니다. 풀 경로에서는 stderr가 보통 비어 있습니다. stdout은 원격 명령 출력만 포함합니다 — TTY 에코, __BROKRE_* 프레이밍, 셸 프롬프트는 제거됩니다.

brokre_exec: argssudo/su가 포함된 binary=ssh는 동일한 풀을 자동으로 사용합니다(항상 reuse, session=new|close 없음). 예: args=["prod","sudo","whoami"].

원격 스크립트/파일 작성 (shell_command, binary=ssh 전용): args에는 별칭만 전달하고 전체 셸 스크립트는 shell_command에 넣으세요(brokre가 sh -c로 정규화). argssh -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를 시작하고, 에이전트가 배스천에서 brokre ssh db를 실행합니다. 멀티홉 라우트는 에이전트당 한 홉씩 벗겨냅니다(b1::b2::dbb1에서 시작한 후 b1b2::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_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=…). 세션 토큰은 localhost에만 유지되며 AI에 반환되지 않습니다. 자동 열기를 비활성화하려면 BROKRE_MCP_NO_AUTO_OPEN=1을 설정하세요.

| MCP 도구 | 용도 |

자격 증명 추가

CLI 설치 후, 매니저는 첫 실행 시 열립니다(brokre manage --onboard --open). 또는 언제든지:

brokre manage --open

또는 첫 대화형 연결 시 저장(모든 CLI):

brokre ssh root@10.0.0.1
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 mux 마스터에 연결되지 않습니다.

크로스 네트워크 목록 상속 (배스천 브로커)

크로스 네트워크 액세스 — 출장, VPN, 공용 진입점 — 로컬 LAN 별칭이 로컬에서 연결할 수 없지만 brokre를 실행하는 배스천을 통해 연결할 수 있는 경우.

전제 조건

  1. 노트북: brokre bastion enable b150 (b150은 저장된 SSH 별칭)

  2. 배스천 호스트가 ~/.brokre/bin/brokre(표준 설치 / npx 경로)에서 brokre를 실행하고 내부 별칭이 저장되어 있음(예: 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를 받습니다.

  • 안전장치: 프로브 동시성 상한, ms 제한시간, 짧은 캐시, 루프 감지, 감사 route/bastion (HMAC v4).

  • Manage UI: brokre manage Bastion 탭 — 배스천 등록/비활성화, Web 키 설정 및 잠금/잠금 해제, 엄격 모드 토글, 원격 별칭 동기화. 비-TTY에서도 /bastion-auth 자동 열림. 감사 탭은 bastion/source로 필터링하고 라우트 필드를 표시합니다.

배스천 게이트 정책 (기본값 vs 엄격 모드)

The bastion gate is a human unlock step before sensitive operations. It is off until you set a bastion key (brokre bastion set-key). After a key exists, unlock establishes a local TTL session (brokre bastion unlock, TTY passphrase, manage UI /bastion-auth, or MCP browser elicitation).

bastion 게이트는 민감한 작업 전에 사람의 잠금 해제 단계입니다. bastion 키를 설정하기 전까지는 꺼져 있습니다 (brokre bastion set-key). 키가 존재하면 잠금 해제는 로컬 TTL 세션을 설정합니다 (brokre bastion unlock, TTY 패스프레이즈, manage UI /bastion-auth, 또는 MCP 브라우저 유도).

Policy is stored at ~/.brokre/bastion/policy.json (strict_mode, default false).

정책은 ~/.brokre/bastion/policy.json에 저장됩니다 (strict_mode, 기본값 false).

Mode

gate_mode

When unlock is required (key must be set)

default

default

Bastion outbound onlyb150::inner routed exec; SSH/scp/sftp to a registered bastion alias; brokre list / brokre_list when bastion discovery SSHs to bastions. Purely local exec (e.g. brokre ssh lan-db) does not require unlock.

strict

strict

Every brokre exec / MCP brokre_exec; metadata-only brokre list stays local-only, while --include-bastions still requires unlock. Use when you want a human in the loop for agent execution while a bastion key is configured.

모드

gate_mode

잠금 해제가 필요한 경우 (키가 설정되어 있어야 함)

기본

default

Bastion 아웃바운드 전용b150::inner 라우팅된 exec; 등록된 bastion 별칭으로의 SSH/scp/sftp; bastion 검색이 bastion에 SSH할 때의 brokre list / brokre_list. 순수 로컬 exec(예: brokre ssh lan-db)는 잠금 해제가 필요하지 않습니다.

엄격

strict

모든 brokre exec / MCP brokre_exec; 메타데이터 전용 brokre list는 로컬 전용으로 유지되며, --include-bastions는 여전히 잠금 해제가 필요합니다. bastion 키가 구성된 상태에서 에이전트 실행에 사람의 개입을 원할 때 사용합니다.

Examples (default mode, key set, session locked)

예시 (기본 모드, 키 설정됨, 세션 잠김)

Operation

Unlock needed?

brokre ssh prod uname -a (local alias)

No

brokre ssh b150::db uname -a

Yes

brokre ssh b150 uptime (registered bastion)

Yes

brokre list --include-bastions

Yes

brokre list (local only)

No

작업

잠금 해제 필요?

brokre ssh prod uname -a (로컬 별칭)

아니요

brokre ssh b150::db uname -a

brokre ssh b150 uptime (등록된 bastion)

brokre list --include-bastions

brokre list (로컬 전용)

아니요

In strict mode, exec rows require unlock; metadata-only brokre list remains local-only and does not unlock unless --include-bastions is used.

엄격 모드에서는 exec 행에 잠금 해제가 필요합니다. 메타데이터 전용 brokre list는 로컬 전용으로 유지되며 --include-bastions를 사용하지 않는 한 잠금 해제되지 않습니다.

Set gate mode

게이트 모드 설정

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

Surface

How

CLI

brokre bastion strict on|off|status

Manage UI

Bastion tab — strict mode toggle

MCP

brokre_bastion_policy — read current policy, or pass {"strict_mode": true} / false

표면

방법

CLI

brokre bastion strict on|off|status

Manage UI

Bastion 탭 — 엄격 모드 토글

MCP

brokre_bastion_policy — 현재 정책 읽기, 또는 {"strict_mode": true} / false 전달

MCP read response includes strict_mode, gate_mode, key_set, unlocked. List/exec responses include bastion_gate (required, unlocked_during_call, idle_expires_at).

MCP 읽기 응답에는 strict_mode, gate_mode, key_set, unlocked가 포함됩니다. 목록/exec 응답에는 bastion_gate (required, unlocked_during_call, idle_expires_at)가 포함됩니다.

Unlock session TTL (defaults): 30 min idle (BROKRE_BASTION_IDLE_SECS), 8 h max lifetime (BROKRE_BASTION_MAX_SECS). Idle window renews on each gated call while unlocked (shared across CLI, MCP, and manage UI via ~/.brokre/run/bastion_session.json). Bastion gate auth is independent of manage UI session idle expiry. Disable auto-open browser on MCP unlock: BROKRE_BASTION_NO_AUTO_OPEN=1.

잠금 해제 세션 TTL (기본값): 유휴 30분 (BROKRE_BASTION_IDLE_SECS), 최대 수명 8시간 (BROKRE_BASTION_MAX_SECS). 유휴 창은 잠금 해제 상태에서 각 게이트 호출 시 갱신됩니다 (CLI, MCP, manage UI 간 ~/.brokre/run/bastion_session.json을 통해 공유). Bastion 게이트 인증은 manage UI 세션 유휴 만료와 독립적입니다. MCP 잠금 해제 시 브라우저 자동 열기 비활성화: BROKRE_BASTION_NO_AUTO_OPEN=1.

Reveal / delete (human-only, real TTY)

공개 / 삭제 (사람 전용, 실제 TTY)

brokre reveal mysql prod-db --field password
brokre rm ssh prod-bastion

Audit log (metadata only)

감사 로그 (메타데이터 전용)

brokre audit list --profile ssh --action exec --json
brokre audit verify --json

Events are stored at ~/.brokre/audit/audit.log (HMAC-chained). Command arguments are uniformly redacted as <REDACTED>. New events include a source field (cli, mcp, or manage). The manage UI Audit log tab and MCP brokre_audit_list expose the same metadata.

이벤트는 ~/.brokre/audit/audit.log에 저장됩니다 (HMAC 체인). 명령 인수는 일관되게 <REDACTED>로 마스킹됩니다. 새 이벤트에는 source 필드(cli, mcp 또는 manage)가 포함됩니다. manage UI 감사 로그 탭과 MCP brokre_audit_list는 동일한 메타데이터를 노출합니다.

Manage UI security

Manage UI 보안

  • 127.0.0.1 only; session token in terminal

  • Passwords: create / rotate only — no read API

  • Delete / rotate require reveal passphrase (or YES for auto-saved records)

  • 15-minute idle timeout

  • 127.0.0.1 전용; 세션 토큰은 터미널에 표시

  • 비밀번호: 생성 / 회전만 가능 — 읽기 API 없음

  • 삭제 / 회전에는 공개 패스프레이즈 필요 (자동 저장된 레코드의 경우 YES)

  • 15분 유휴 제한 시간

Architecture

아키텍처

┌─────────┐     ┌──────────┐     ┌─────────────┐     ┌────────────┐
│ AI/User │────▶│ brokre CLI│────▶│ OS Keychain │────▶│ Vault File │
└─────────┘     └──────────┘     └─────────────┘     └────────────┘
                      │
                      ▼
               ┌─────────────┐
               │  PTY + inj. │──▶ any CLI on PATH (ssh, mysql, gsql, …)
               └─────────────┘
  • Double encryption: unique DEK per field; wrapped for exec and reveal separately.

  • Vault metadata: profile, name, host_alias, saved_args in cleartext beside ciphertext (THREAT_MODEL.md T3).

  • SSH private keys: 0600 temp file + -i for the session (docs/HARDENING.md).

  • 이중 암호화: 필드별 고유 DEK; execreveal용으로 별도 래핑.

  • Vault 메타데이터: profile, name, host_alias, saved_args는 암호문 옆에 평문으로 저장 (THREAT_MODEL.md T3).

  • SSH 개인 키: 0600 임시 파일 + 세션용 -i (docs/HARDENING.md).

Preset manage UI groups

사전 설정 manage UI 그룹

Convenience tabs when the binary is on PATH:

바이너리가 PATH에 있을 때의 편의 탭:

Group

Binaries

SSH

ssh, scp, sftp (shared creds)

FTP

ftp, lftp

MySQL

mysql, mariadb

PostgreSQL

psql, postgres

Redis

redis-cli, redis

ClickHouse

clickhouse-client, clickhouse

MinIO

mc, minio

그룹

바이너리

SSH

ssh, scp, sftp (공유 자격 증명)

FTP

ftp, lftp

MySQL

mysql, mariadb

PostgreSQL

psql, postgres

Redis

redis-cli, redis

ClickHouse

clickhouse-client, clickhouse

MinIO

mc, minio

Roadmap

로드맵

Today: generic PTY wrapper + manage.toml groups + prompts.toml overrides.

현재: 일반 PTY 래퍼 + manage.toml 그룹 + prompts.toml 재정의.

Planned: full TOML connector profiles under ~/.brokre/profiles/ with per-tool injection strategies.

계획: ~/.brokre/profiles/ 아래의 전체 TOML 커넥터 프로필과 도구별 주입 전략.

Piped stdin and OpenSSH sharing

파이프된 stdin 및 OpenSSH 공유

  • Piped stdin (tar | brokre ssh host 'tar xf -'): pipe data forwards only after injection completes.

  • OpenSSH family (ssh, scp, sftp): shared saved credentials when the host matches. Interactive save required first (TTY).

  • 파이프된 stdin (tar | brokre ssh host 'tar xf -'): 파이프 데이터는 주입이 완료된 후에만 전달됩니다.

  • OpenSSH 계열 (ssh, scp, sftp): 호스트가 일치할 때 저장된 자격 증명을 공유합니다. 먼저 대화형 저장이 필요합니다 (TTY).

Development

개발

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

Release version is declared in VERSION (also reflected in Cargo.toml and packages/brokre-mcp/package.json). Official binaries and npm packages are published by TechinOne via GitHub Releases and CI — not part of this open-source tree.

릴리스 버전은 VERSION에 선언되어 있습니다 (Cargo.tomlpackages/brokre-mcp/package.json에도 반영됨). 공식 바이너리와 npm 패키지는 TechinOne이 GitHub Releases 및 CI를 통해 게시합니다 — 이 오픈소스 트리의 일부가 아닙니다.

License

라이선스

MIT — see LICENSE.

MIT — LICENSE 참조.


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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityNo data
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Credential isolation proxy for AI agents. Injects API keys at the network boundary so your agent never sees the raw credential. Supports domain allowlists, agent auth, policy enforcement, and audit logging.
    3
    106
    13
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to securely access encrypted secrets (SSH keys, API tokens, passwords) with real-time user approval via Passkey, and supports SSH remote execution through the MCP protocol.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to securely access authenticated services (HTTP, SSH, SMTP) without exposing secrets, by acting as a server-side proxy that injects authentication.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Furowu/brokre'

If you have feedback or need assistance with the MCP directory API, please join our Discord server