一句话简介:Ops(又称 OpsPilot)是一款轻量、安全、跨平台的智能化 Web SSH/SFTP 工作台。它在现代 Web 终端体验之上内置了 Approval-Gated 智能运维 Agent,让大模型能够直接操作服务器,同时通过精细化的工具审批闸门确保系统绝对安全——AI 负责效率,人类掌握最终决定权。
📌 一、核心功能矩阵
| 模块 | 功能特性 | 详细描述 |
|---|---|---|
| 全功能 Web 终端 | 多会话 Web SSH | 基于 xterm.js,支持标签页 / 多窗口并发连接、自定义 PTY 窗口大小调整(Resize)、多套色彩主题与快捷键 |
| 连接日志与审计 | 实时捕获会话终端日志,提供完整审计链路与历史命令追溯 | |
| 跳板机(Jump Host) | 支持通过跳板机代理登录内网主机,满足堡垒机 / 多级网络场景 | |
| 可视化 SFTP | 文件全生命周期管理 | 远程文件树浏览、在线文本编辑器(代码 / 配置实时修改)、文件上传 / 下载、权限控制 |
| Agentic Ops(AI 运维) | 自然语言运维助手 | 支持绑定自定义大模型(OpenAI、DeepSeek、SiliconFlow 等),理解自然语言需求并自动转换为运维指令 |
| 审批闸门(Approval Gate) | 高危操作(如 rm -rf、配置修改、服务重启)触发阻断并推送到前端界面,由人类工程师人工确认后方可继续执行 | |
| 上下文绑定 | Agent 能自动识别当前正在操作的 SSH 会话与工作目录,实现「在当前终端上下文执行工具」 | |
| 跨平台交付 | Web & 桌面原生客户端 | 采用 Tauri 2(Rust) 替代传统 Electron,极低内存与 CPU 占用;搭配 Go 语言编写的本地 Sidecar 零依赖运行 |
| 企业级安全 | 凭据与密钥安全存储 | SSH 密码与私钥使用 AES-256-GCM 加密存储,本地凭据自动对接 macOS Keychain / Windows Credential Manager |
🛠️ 二、全栈技术栈选型
┌──────────────────────────────────────────┐
│ React + Vite + xterm.js │
│ (Web Frontend / Tauri Desktop UI) │
└────────────────────┬─────────────────────┘
│ HTTP / WebSocket (Port 3001 or Local Port)
┌────────────────────▼─────────────────────┐
│ Go 1.22+ API / WS Server │
│ (chi / gorilla/ws / pkg/sftp) │
└───────────┬───────────────────┬──────────┘
│ │
┌─────────────▼──────┐ ┌──────▼────────────────┐
│ LLM Provider Engine│ │ ssh.Client / Session │
│ (OpenAI / DeepSeek)│ │ golang.org/x/crypto │
└────────────────────┘ └───────────────────────┘
- 前端(Frontend):React 18 + TypeScript + Vite + Tailwind CSS,
xterm.js(终端)、Monaco / Lucide(编辑器与图标) - 后端(Backend):Go 1.22+,
go-chi/chi(轻量 HTTP 路由)、gorilla/websocket(双工通信)、pkg/sftp(SFTP 实现) - 数据库:GORM 驱动,原生支持 MySQL / PostgreSQL / CGO-Free SQLite,通过
DATABASE_URL单环境变量零配置无缝切换 - 桌面端(Desktop):Tauri 2(Rust)+ 本地 Go Sidecar(
ops-local) - 密码学与安全:
golang.org/x/crypto/ssh、AES-256-GCM 凭据加密
🔬 三、核心实现原理深度剖析
1. Web SSH 与 Web PTY 实时流传输原理
传统终端交互依赖本地 TTY/PTY,而 Ops 将其搬到了 Web 端,核心架构如下:
[Browser: xterm.js] ◄──(WebSocket Json: term-data / term-resize)──► [Go backend: ws.go] ◄──(io.Pipe / pty)──► [Remote Server: ssh.Session]
- 协议转换层(
server/api/ws.go):前端用xterm.js捕捉用户的每一个按键输入,通过 WebSocket 封装为 JSON 消息(如{"type": "term-data", "data": "ls\n"})发送给后端;后端经gorilla/websocket接收后,写入 Gossh.Session提供的stdin写入流。 - 远程 PTY 分配(
server/ssh/manager.go):后端调用golang.org/x/crypto/ssh的session.RequestPty("xterm-256color", rows, cols, modes)申请伪终端,并建立异步 Goroutine 轮询读取ssh.Session的stdout/stderr数据流,以term-data消息实时推送到前端渲染。 - 窗口动态 Resize:前端监听浏览器窗口或终端面板尺寸变化,发送
term-resize消息;后端调用session.WindowChange(rows, cols)实时更新远程 PTY 的行高与列宽,确保 Vim 等全屏 CLI 工具显示不乱码。
2. 审批闸门机制:Agentic Ops 的安全性设计
传统 AI 运维中,直接让 LLM 获得命令行权限极具风险(误删库、乱改配置)。Ops 设计了 Approval-Gated Tool Calling(带审批阻断机制的工具调用流程):
用户发送提示词 "帮我排查并清理磁盘"
│
▼
┌────────────────┐
│ LLM (DeepSeek) │ 识别出需要调用 run_ssh_command("rm -rf /tmp/cache")
└───────┬────────┘
│ Tool Call 请求
▼
┌────────────────────────────────────────────────────────┐
│ 后端工具策略引擎 (agent_tool_policy.go & execution.go) │
└───────┬────────────────────────────────────────────────┘
│ 命中危险指令匹配规则 (Block / Require Approval)
├───────────────────────────────┐
│ (危险/写入类操作) │ (读操作/只读指令)
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ 挂起执行,生成审批单 │ │ 自动批准,直接在 │
│ 推送前端等待人类确认 │ │ 当前 SSH 会话中执行 │
└───────┬──────────────┘ └──────────────────────┘
│ 用户在 UI 点击 "Approve"
▼
┌───────────────────────────┐
│ 执行工具并把终端输出喂回 │
│ LLM 产生下一步决策 │
└───────────────────────────┘
关键技术点:
- 会话上下文绑定:用户在 UI 选中某台服务器并打开 Agent 窗口时,Agent 自动关联对应的
SessionID。Agent 发起的run_ssh_command、read_ssh_file等操作全部在真实的远程 SSH 会话通道中安全执行。 - 规则分类器(
classifyRunSSHCommand):- Safe(自动执行):如
ls、cat、df -h、systemctl status - Requires Approval(需要人工确认):如
systemctl restart、cp、mv、sed - Blocked(禁止执行):高危危险指令或注入行为
- Safe(自动执行):如
3. Tauri 2 + Go Sidecar 跨平台原生桌面端架构
不同于 Electron 动辄 150MB+ 的打包体积与上百兆的内存占用,Ops 采用 Tauri 2 + 嵌入式 Go Sidecar(ops-local) 模式:
- 独立与轻量化:桌面前端位于
applications/desktop-ui,构建产物由 Tauri 渲染(macOS WebKit 或 Windows WebView2);后端通过 Go 编译为单文件二进制ops-local,作为 Tauri 的 Sidecar 进程启动。 - 零信任通信机制:
ops-local本地启动时绑定随机 Loopback 端口(如127.0.0.1:54321),并生成仅限当次启动有效的临时 Bridge Token;Tauri 客户端通过 IPC 获知该 Token,后续所有 REST/WS 请求均带 Token 认证,防止本地恶意软件扫描端口非法入侵。 - 系统级凭据保护:桌面端的 AES 加密 Master Key 优先存储在系统原生安全凭据库(macOS Keychain / Windows Credential Manager)中,实现极高防护等级。
4. 零依赖多数据库兼容层与动态迁移
Ops 实现了完全解耦的数据库与存储层架构:
- CGO-Free 零依赖:SQLite 驱动选用纯 Go 实现的
modernc.org/sqlite,无需安装 C 编译器(GCC/Clang)即可直接go build交叉编译。 - 单环境变量
DATABASE_URL:通过判断 URL Scheme 自动识别并切换到对应的数据库驱动:sqlite://./data/ops.db→ 本地开发与轻量级部署mysql://user:pass@tcp(127.0.0.1:3306)/ops→ 团队 / 企业级生产部署postgres://user:pass@127.0.0.1:5432/ops→ Postgres 部署
- 动态 AutoMigrate:服务启动时通过 GORM 自动补全表结构与索引,无需手动执行复杂的 SQL 建表脚本。
📂 四、代码库目录结构导航
web_ide/
├── web/ # 网页端 React 源码
│ └── src/
│ ├── apps/ # SSH 终端 (SSHClient.tsx)、Agent 浮窗 (AgentDrawer.tsx)
│ └── features/ # 主机资产 (hosts)、凭据 (credentials)、审计日志 (connection-logs)
├── server/ # Go 后端核心逻辑
│ ├── api/ # REST 路由 (routes.go)、WebSocket 处理 (ws.go)、Agent 引擎与审批 (agent_tool_*.go)
│ ├── ssh/ # SSH 会话池 (manager.go)、SFTP 文件管理 (sftp.go)
│ ├── db/ # GORM 数据模型与 DB 驱动连接 (models.go, db.go)
│ ├── security/ # JWT 校验与 AES-256-GCM 秘钥加解密
│ └── cmd/ops-local/ # 桌面端 Go Sidecar 独立入口
├── applications/ # Tauri 2 原生桌面端源码
│ ├── desktop-ui/ # 桌面端轻量前端
│ └── src-tauri/ # Tauri Rust 配置文件与构建脚本
└── ops.sh # 统一任务执行脚本 (dev | build | test)
🎯 五、总结与展望
Ops(OpsPilot) 展示了现代 Web 技术与 AI 运维结合的最佳实践:
- 它不仅是性能卓越、外观现代的 Web SSH / SFTP 客户端;
- 更是 Agentic AI 在真实运维场景落地的硬核实验——通过严格的「人类在环(Human-in-the-loop)审批闸门」,在 AI 生产力与系统安全性之间取得了平衡;
- 借助 Tauri 2 与 Go 的黄金组合,完美兼顾了 Web 部署的便捷性与桌面原生应用的轻量高效。
AI 能做的远不止「帮你写代码」——当工具调用型 Agent 与「人在环」审批机制相遇,AI 运维从概念走向生产,Ops 正在用代码给出它的答案。
发表评论
合规评论将自动发布,无法自动判断的评论会进入人工审核。