内容
<p align="center">
<img src="resources/icon.png" alt="Bifrost" width="96" />
</p>
<h1 align="center">Bifrost</h1>
<p align="center">
<strong>适用于 Linux 的现代化连接管理器 — Ásbrú Connection Manager 的精神继承者。</strong>
</p>
<p align="center">
<a href="LICENSE"><img alt="License: GPL-3.0-or-later" src="https://img.shields.io/badge/License-GPL--3.0--or--later-blue.svg" /></a>
<img alt="平台: Linux" src="https://img.shields.io/badge/Platform-Linux-informational" />
<img alt="Electron" src="https://img.shields.io/badge/Electron-34-9feaf9" />
</p>
<p align="center">
<strong>中文</strong> · <a href="README.es.md">西班牙语</a>
</p>
Bifrost 是适用于系统管理员、DevOps 和 DevSecOps 团队的桌面连接管理器,主要用于管理数十到数百个远程服务器 — 以 SSH 为首选,提供现代化的终端体验。
> **状态: alpha (v0.3.0), 仅限 Linux。** 本 README 诚实地反映了当前的状态:**功能** 部分列出了当前在 UI 中能够正常工作的功能,并经过代码验证。已经在后端实现但尚未在 UI 中可用的功能单独列在[一个部分](#built-in-the-backend-ui-pending) 中,已知的功能缺口在 [限制](#known-limitations-alpha) 部分列出。如果您发现这里的描述与实际情况不符,那是一个 bug — 请提交问题。
## 功能
### 连接与组织
- 连接的 CRUD 操作,支持分层分组、收藏、最近连接、实时搜索(匹配标签)和标签徽章
- 连接模板:保存任意连接为模板,在新建连接时应用
- 每连接备注(标签:备注/证据/命令/错误),支持搜索的备注面板
- 每连接统计信息(总连接次数、最后连接时间、会话时间 — 来自审计日志)和实时健康状态指示(周期性 ping)
- 从连接的右键菜单中唤醒 -OLAN
- 工作区:命名的连接过滤器,用于将侧边栏范围限定到正在处理的内容
### 终端
- xterm.js 搭配 WebGL 渲染;本地 shell (带有 shell 选择器:bash/zsh/fish/pwsh)和 SSH 在同一个标签页系统中
- 分割窗格(上下文菜单;水平/垂直),最大化窗格,将窗格爆炸为标签页,将标签页合并
- 向所有窗格或所有标签页广播输入(带有可见的警告叠加层),以及带有草稿自动保存的多行广播栏
- 粘贴安全性:多行粘贴确认,带有危险命令扫描;Ctrl-C 复制选中文本,当未选中时中断
- 每标签页缩放,字体连体,选中即复制,OSC 52 剪贴板(tmux/vim 复制有效),可点击的网络链接
- SSH 输出中的 `.md` 路径可点击并在内部 Markdown 查看器中打开 — 相对路径相对于跟踪的工作目录解析
- **复制为 CSV / Markdown**:右键单击任意选中文本 — ASCII-pipe,GFM 和 box-drawing 表格(`psql`,MySQL 等)重建为 RFC 4180 CSV 或干净的 Markdown;在终端,Markdown 查看器和 AI 响应中均有效
- 从剪贴板粘贴图片到服务器(Ctrl+Shift+I):通过 SFTP 上传(包括跳转链),路径键入终端,退出时清理
- 约 50 个内置配色方案,每连接方案和背景色调(生产环境 = 红色,预发布环境 = 绿色),动态标签页标题(OSC 0/2)且标题锁定
- 将标签页分离到独立窗口(实时会话随之移动)
- 终端截图到 PNG,F11 全屏,空闲补全桌面通知
- 错误检测徽章适用于失败的命令,AI “解释命令”适用于任意选中文本,空闲会话 AI 摘要可保存为备注
### 会话持久化
- 本地会话持久化通过真正的复用器集成:**dtach, tmux, zellij, rmux** — 探测,附加选择器和每连接自定义参数(配置文件,zellij 布局,额外标志)
- 会话恢复:重启时,Bifrost 提供重新打开之前的标签页并重新连接它们
- SSH 自动重新连接,指数退避(3s → 60s)
### SSH 和网络
- 认证:密码,密钥文件(带有通行短语),SSH 代理;键盘交互式 MFA 提示转发到您
- 存储的密码使用 OS 密钥链加密(`safeStorage`);编辑表单显示它们被遮蔽,显示时可取消遮蔽,清除字段会删除它们
- TOTP/2FA:每连接存储一个 Base32 密钥,Bifrost 在验证提示出现时自动输入代码
- 主机密钥验证(TOFU,SHA-256 指纹)带有已知主机管理面板在设置中
- **跳转主机链**(多跳 ProxyJump)带有可视化链编辑器 — 由 SSH,Mosh 和隧道使用;内联跳转密码在静止时加密
- **隧道**:本地和远程端口转发带有完整管理器 UI,每隧道凭证和启动时自动启动
- **Mosh** 作为一等连接方法(通过 PTY 启动,支持跳转链)
### SFTP 和文件
- 每 SSH 标签页一个 SFTP 面板:浏览,上传(多文件),下载,删除,创建目录
- 剪贴板图片上传(参见终端部分)
### 自动化
- **远程命令**:每连接或全局命令调色板,带有组,确认标志,快捷键,`<VAR>` 扩展和 `{{param}}` 提示 — 从终端的右键菜单运行
- **运行手册**:粘贴 Markdown 运行手册,选择目标标签页,逐步骤执行带状态,干燥运行模式和危险命令警告
- **脚本**:沙盒 JavaScript(隔离工作线程)带有 `send`/`log`/`sleep`,在应用内编辑,从上下文菜单运行到实时终端
- 带有类别,搜索,复制或在终端中运行,`{{param}}` 提示的片段浏览器
- 变量扩展(`<IP>`,`<USER>`,`<ENV:name>`,`<GV:name>`,日期)在标签页标题和远程命令中
### 可观察性和安全性
- 追加式审计日志(JSON Lines)连接和凭证事件 — 它还为每连接统计信息提供支持
- 终端输出的机密编辑过滤器(会话在设置中切换)
- 整个过程中加密凭证存储:连接,隧道和跳转主机
- 会话空闲检测带有 AI 摘要;当长时间运行的命令完成时桌面通知
### AI 和 MCP
- AI 助手面板(Ctrl+Shift+A),可停靠或在独立窗口中,带有来自 **Ollama, OpenRouter, OpenAI, 或 DeepSeek** 的流式响应(提供者/模型/密钥在设置中可配置)
- 解释命令,错误感知,空闲摘要和复制为 CSV/Markdown 适用于响应
- **MCP 服务器** 适用于 AI 代理(例如 Claude):**42 工具,9 资源,8 提示模板**,stdio 或 HTTP 带有 Bearer 认证,破坏性命令过滤, 只读数据库访问 — 参见 [`docs/MCP_ARCHITECTURE.md`](docs/MCP_ARCHITECTURE.md)
### 应用壳
- 命令调色板(Ctrl+K)适用于连接和命令;一组固定的全局快捷键包括和弦(Ctrl+K,然后 S/P/W)
- 插件系统:从设置中安装/启用/禁用 npm 打包的插件,针对文档化的钩子 API ([`docs/PLUGIN_API.md`](docs/PLUGIN_API.md))
- 通过 git 配置同步:导出/导入/同步您的配置到您指定的仓库
- 窗口状态持久化,系统托盘,“Spectral Command” 设计系统 ([`docs/reference/DESIGN.md`](docs/reference/DESIGN.md))
- 界面为英文;西班牙语翻译已启动(目前约 30 个字符串 — 欢迎帮助)
## 已在后端构建,待 UI 实现
这些功能作为真正的,已测试的主进程实现存在,带有 IPC 支持,但**尚未有 UI 支持** — 选择它们时不会发生任何事情(或回退到 SSH)。它们是路线图中的首要任务,每个都是一个范围明确的贡献:
- **协议启动器**:RDP(xfreerdp/mstsc 带有剪贴板/驱动器/音频标志),VNC,Telnet,FTP(lftp),TN3270,WebDAV,AWS SSM 会话
- **导入**:`~/.ssh/config` 解析器,Ansible 清单,Terraform 状态,JSON 导出/导入
- **云发现**:AWS EC2,GCP,Azure 虚拟机,Docker,Podman,Kubernetes — 基于 CLI 的扫描器已准备就绪,无面板
- **外部密码管理器**:1Password,Bitwarden,HashiCorp Vault,AWS Secrets Manager,Azure Key Vault,KeePassXC 桥接
- **SSH CA**:通过 HashiCorp Vault 或本地 CA 进行证书签名
- **期望引擎**(模式 → 响应自动化带有跳转规则)和**宏**
- **集群**:持久集群后端(创建/成员/广播)— 当前面板是视觉草图,尚未连接
- **全局变量编辑器**(`<GV:>` 解析器已生效;无 UI 定义它们)
- **高级 SSH 选项直连**:X11 转发,HTTP 代理,代理转发,密码/KEX/MAC 选择 — 表单保存它们,连接路径必须使用它们
- **会话文件日志记录**(基于模式的 `.log` 编写器)和**保险库重新加密**
- 静止数据库加密(AES-256-GCM,需要启动时解密 + UI)
## 已知限制(alpha)
- 标签页 **分离** 有效;**重新连接** 尚未实现(分离窗口的会话存活,但主窗口无法恢复)
- **会话记录** 产生无有效载荷的 asciicast 文件(仅标头)— 请勿依赖它
- 连接前/后 **钩子**:编辑器保存它们,但连接时尚未执行
- **在终端中查找**,清除/重置终端菜单项和键盘窗格调整大小尚未连接
- **动态(SOCKS)隧道** 已声明但未转发(本地/远程工作)
- **Zmodem** sz/rz 检测并将您重定向到 SFTP — 无终端传输
- **FIDO2** 标签页存在但 ssh2 无法直接使用 sk-keys(仅通过 ssh-agent 有效)
- 自定义 **快捷键编辑器** 尚未覆盖内置快捷键;系统托盘连接菜单为空
- 默认情况下,机密编辑 **关闭** 并在每个会话中重置
## 路线图
除了连接上述部分:Windows 支持([计划](docs/WINDOWS_COMPAT_PLAN.md)),macOS 打包,多 OS CI,Ásbrú 导入,真正的 ZMODEM 传输,SFTP 重命名/更改权限/双窗格,E2E 测试在 CI 中,基于规范的用户文档(英文和西班牙文),完成西班牙语 UI 翻译。
## 安装
从 [发布页面](https://github.com/jimmyrivas/bifrost/releases) 下载最新的 AppImage,然后:
```bash
chmod +x Bifrost-*.AppImage
./Bifrost-*.AppImage
```
验证下载:
```bash
sha256sum -c SHA256SUMS
```
> 在没有密钥环(gnome-keyring/kwallet)的 Linux 上,凭证将退回到混淆存储,并带有警告 — 安装密钥环以实现真正的加密。
## 从源代码构建
要求:Node.js 20+,[pnpm](https://pnpm.io) 10.x 和原生模块的构建工具(`python3`,`make`,`g++`)。
```bash
git clone https://github.com/jimmyrivas/bifrost.git
cd bifrost
pnpm install
pnpm rebuild # 针对 Electron 的 ABI 重建原生模块
pnpm dev # 带有 HMR 的开发
pnpm package # 在 dist/ 中生成 AppImage / deb / rpm
```
有用的脚本:
| 命令 | 描述 |
| --- | --- |
| `pnpm lint` | ESLint(带有 `--fix`) |
| `pnpm typecheck` | TypeScript `--noEmit` |
| `pnpm test` | Vitest 单元测试 |
| `pnpm test:e2e` | Playwright E2E 测试 |
| `pnpm mcp:dev` | 运行 MCP 服务器(stdio) |
## 架构
三进程 Electron 应用加上独立的 MCP 服务器:
- **主进程** (`src/main/`) — SQLite(Drizzle),PTY/SSH,密钥链,托盘,~26 个 IPC 模块
- **预加载** (`src/preload/`) — 类型化的 IPC 桥接
- **渲染器** (`src/renderer/`) — React 18 + TypeScript,Zustand,Tailwind v4,xterm.js
- **MCP 服务器** (`src/mcp/`) — 独立 Node 进程,通过 sql.js 进行只读数据库访问
预期行为在 [`openspec/specs/`](openspec/specs/) 下指定。注意,其中一些规范描述了其 UI 仍待实现的 功能 — 规范是目标,本 README 是当前状态。
## 贡献
问题和拉取请求欢迎 —
["后端已构建,待 UI 实现" 部分](#built-in-the-backend-ui-pending) 是开始贡献的好地方:大部分工作已经完成并经过测试。提交前:
```bash
pnpm lint && pnpm typecheck && pnpm test
```
重大更改需经过 [OpenSpec](openspec/) 工作流程 — 见 `openspec/changes/archive/` 中的真实示例,从提案到任务到规范变更。
## 许可证
Bifrost 是免费软件,根据
[GNU 通用公共许可证 v3.0 或更高版本](LICENSE)(GPL-3.0-or-later)授权。
以北欧神话中连接世界的燃烧彩虹桥命名 — 并在怀念
[Ásbrú Connection Manager](https://www.asbru-cm.net/) 的情况下构建,后者的名称指向同一座桥梁。