JumpServer Bastion (jms)

io.github.MiFaZhanv0.1.1更新於 Oct 8, 2026

Run commands, transfer files and browse assets on a JumpServer v4 bastion from your AI assistant.

概覽

AI 產生的概覽

讓 AI 助理列出、在 JumpServer v4 堡壘機後方的資產上執行指令並傳輸檔案。

功能
這是 jms-client 命令列工具附帶的本機 stdio MCP 伺服器,透過 JumpServer v4 的 REST API 與 KoKo 終端閘道存取堡壘機。它提供列出與解析資產、執行指令、以 SFTP 上傳、下載與中轉檔案、列出已設定伺服器等工具;設定 JMS_MCP_DEBUG 時會額外註冊連線池狀態的除錯工具。登入狀態與終端連線依伺服器、資產、帳號、協定重複使用,操作會寫入本機 JSONL 稽核串流。
適用情境
適合助理需要操作只能經 JumpServer 堡壘機存取的主機時使用,例如日常維運中的診斷或檔案搬移。它面向日常維運與 AI 輔助維運情境,而非通用 shell 存取。
執行需求
以本機程序方式在使用者機器上執行;清單未宣告環境變數或標頭。需要預編譯二進位檔或 Go 工具鏈(Go 1.25+),以及可存取的 JumpServer v4(含 KoKo)部署。需先設定伺服器位址、使用者名稱與憑證;密碼與 TOTP secret 存入作業系統憑證庫,無介面環境可用 JMS_PASSWORD_<別名> 與 JMS_OTP_<別名> 作為備援。SFTP 依賴部署開放 KoKo SSH 埠。
安裝前請注意
此伺服器會在遠端資產上執行指令並傳輸檔案,助理可能因此修改或刪除資料。憑證存放於作業系統憑證庫,或透過 JMS_PASSWORD_<別名> 與 JMS_OTP_<別名> 提供;設定檔只保存中繼資料。代理環境變數被刻意忽略,需明確設定代理。操作會以 JSONL 記錄在本機,可能包含敏感維運細節。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 JumpServer Bastion (jms),將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

jms-client

JumpServer v4 堡垒机的命令行客户端与 MCP 服务器。 单二进制,用 Go 编写,面向日常运维与 AI 辅助运维场景。

通过 JumpServer 的 REST API 与 KoKo 终端网关访问资产:列出资产、执行命令、交互式 shell、SFTP 传输;同时提供 stdio MCP 服务器,让 Claude Code、Codex、pi 等 AI 客户端直接操作堡垒机资产。

特性

  • 单二进制 — 静态编译,Linux / macOS / Windows 交叉编译
  • 双地址故障转移 — 内网/外网双地址自动探测选择,last-good 记忆加速冷启动
  • 连接池 — MCP 场景下登录态与终端连接按 服务器/资产/账号/协议 复用,空闲回收、损坏重建
  • 凭据不落盘 — 密码与 TOTP secret 存 OS 凭据库(Windows Credential Manager / macOS Keychain / Linux Secret Service),配置文件只有元数据,可备份可同步
  • MCP 服务器 — 8 个工具,供 AI 客户端列资产、执行命令、传输文件
  • 本地审计流 — 结构化 JSONL 落盘,jms tail 实时观察,jms attach 人工接入同一连接池

安装

预编译二进制(推荐,无需 Go 工具链):从 Releases 下载对应平台,解压后把 jms(Windows 为 jms.exe)放进 PATH:

平台文件
Windows x86_64jms-client_<版本>_windows_amd64.zip
Windows ARM64jms-client_<版本>_windows_arm64.zip
macOS Apple Siliconjms-client_<版本>_darwin_arm64.tar.gz
macOS Inteljms-client_<版本>_darwin_amd64.tar.gz
Linux x86_64jms-client_<版本>_linux_amd64.tar.gz
Linux ARM64jms-client_<版本>_linux_arm64.tar.gz

每个压缩包同时带 checksums.txt 可供校验。

用 Go 安装(需 Go 1.25+):

sh
go install github.com/MiFaZhan/jms-client/cmd/jms@latest

从源码构建:

sh
git clone https://github.com/MiFaZhan/jms-clientcd jms-clientgo build -o jms ./cmd/jms

MCP 客户端(Claude Desktop 等)

下载 Releases 里的 jms-client.mcpb 双击安装。这一个文件已包含全部 6 个平台(macOS/Linux/Windows × x86_64/arm64)的预编译二进制,启动时由内置 launcher 自动选择当前平台,无需按平台挑文件。

也可以手动配置,让 MCP 客户端直接调用已安装的 jms:

json
{  "mcpServers": {    "jms": { "command": "jms", "args": ["mcp"] }  }}

快速开始

sh
jms config add bastion        # 录入双地址、用户名、密码(隐藏输入)jms config test               # 验证两端可达性与登录jms ls                        # 列出资产jms exec web-01 "uptime"      # 单次命令,进程退出码即远端退出码jms login web-01              # 交互式 shell(Ctrl+] 退出)jms sftp web-01:/etc/hosts .  # 下载文件jms mcp                       # 启动 stdio MCP 服务器

配置

配置文件位于 %APPDATA%\jms\config.toml(Windows)或 ~/.config/jms/config.toml(Unix),可用 JMS_CONFIG 环境变量或 --config 覆盖。

toml
version = 2default_server = "bastion"
[servers.bastion]internal = "http://192.168.1.10:2280/"        # 内网地址(可缺省)external = "http://bastion.example.com:2280/" # 外网地址(可缺省)username = "testuser"# prefer = "internal"                         # 地址偏好,可设 external# ssh_port = 2222                             # KoKo SSH 端口# proxy = "direct"                            # 本服务器强制直连,覆盖全局 proxy

代理

默认直连,且不读取 HTTP_PROXY / HTTPS_PROXY / NO_PROXY。 堡垒机客户端走本机透明代理几乎总是错的:开发机上这些变量是全局导出的,而代理自身的 DIRECT 规则又往往命中堡垒机地址,于是请求经由一个没人要求的代理离开进程,代理自己的错误(典型是空 body 的 502)冒充了真实网络结果。

需要跨代理访问时显式配置(http / https / socks5):

toml
version = 2default_server = "bastion"proxy = "socks5://127.0.0.1:1080"             # 全局;缺省即直连
[servers.bastion]internal = "http://192.168.1.10:2280/"username = "testuser"proxy = "direct"                              # 本服务器强制直连,覆盖全局

配置优先于环境:配了代理就连 NO_PROXY 也不看。内网地址与 proxy = "direct" 都不需要额外设置。

凭据

数据存放位置
别名 / 地址 / 用户名config.toml
password / otp_secretOS 凭据库(service=jms-client)

Headless 环境可用环境变量 JMS_PASSWORD_<别名> / JMS_OTP_<别名>(大写,-→_)回退。两处都没有时明确报错,绝不静默降级为明文落盘。

命令

jms config add|list|remove|set-default|test    # 服务器配置与凭据jms ls [server] [-q keyword]                   # 列出/搜索资产jms exec <target> <command...>                 # 执行命令jms login <target>                             # 交互式 shelljms sftp <src> <dst> [-R] [--verify]           # 上传/下载/资产间中转jms ssh-pipe <target> [command...]             # stdio 桥(rsync -e 可用)jms tail [-f] / jms attach / jms log show      # 审计流观察与接入jms mcp [--print-config]                       # stdio MCP 服务器

<target> 语法为 asset@server,省略 @server 时使用默认服务器。

MCP

jms mcp 暴露 7 个工具:jms_ls、jms_resolve_asset、jms_exec、jms_sftp_upload、jms_sftp_download、jms_sftp_relay、jms_config_list。设 JMS_MCP_DEBUG=1 时额外注册第 8 个调试工具 jms_pool_status。

客户端配置片段:

json
{  "mcpServers": {    "jms": { "command": "jms", "args": ["mcp"] }  }}

后端与兼容性

JumpServer 的 KoKo 组件提供两种终端通道:

后端通道说明
WebSocket(默认)/koko/ws/terminal/与 Web 终端同源,Web 终端可用即可用
SSHKoKo SSH 端口(默认 2222)需部署开放;代码完整但尚未在开放 2222 的部署上验证

所有命令默认走 WebSocket;SSH 后端用 --backend ssh 显式开启。SFTP 由 KoKo SSH 通道承载,依赖部署开放 2222。

要求:JumpServer v4(含 KoKo)。诊断:jms login --timing <资产> 输出分阶段耗时,JMS_WS_DUMP=1 打印 WebSocket 原始帧。

开发

sh
go build ./...go test ./...go vet ./...gofmt -l .     # 应为空

架构与协议细节见 DESIGN.md。集成测试由 JMS_TEST_SERVER 门控,未设置时自动 skip。

许可

MIT © MiFaZhan。设计与 KoKo 协议结论参考了 GCS-ZHN/jms-cli。

來源:README.md,提交 1db25bd

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v0.1.1最新Oct 8, 2026