星枢终端(Nexus Terminal) 是一款现代化、功能丰富的 Web SSH / RDP / VNC 客户端,致力于提供高度可定制的远程连接体验。
本项目 Fork 自 Heavrnl/nexus-terminal,在上游基础上进行了大量工程质量提升与功能增强。以下是本 Fork 独有的改进:
| 优化项 | 效果 |
|---|---|
| SSH 终端输入延迟优化 | 输入延迟从 72-232ms 降至 <3ms(提升 98%),区分小数据包直写与大数据包批量缓冲 |
| 应用启动性能优化 | 统一初始化 API,3-4 次网络请求合并为 1 次,消除白屏等待 |
| 文件管理器虚拟滚动 | 超过 50 个连接时自动启用虚拟滚动,支持海量文件流畅渲染 |
| 命令历史虚拟滚动 | 数千条历史记录流畅渲染,无卡顿 |
| 前端懒加载优化 | RDP/VNC 组件按需加载,guacamole 依赖 (~200KB) 不再阻塞首屏 |
| SQLite WAL 模式 | 启用 WAL 模式优化数据库并发读写,减少锁竞争 |
- 终端外观实时预览:外观自定义设置中新增实时预览窗口,支持字体、主题、描边、阴影的即时预览
- 强制键盘交互式认证:SSH 连接新增
keyboard-interactive选项,支持 TOTP/2FA 服务器认证 - NL2CMD 自然语言命令生成:集成 OpenAI/Claude/Gemini 多模型,自然语言直接转换为终端命令
- 可配置速率限制:通过环境变量灵活控制 API 速率限制
- 统一缓存管理器:类型安全的 localStorage 操作,支持版本控制与 TTL 过期管理
- 统一错误消息提取器:消除重复的错误提取模式,全局统一错误处理
- 技术债务治理(持续进行):历史批次已完成 24/24 项清理;截至 2026-04-14 当前口径为(TODO 0 条、E2E
test.skip0 条、运行时漏洞 0 条、全量审计漏洞 0 条、直连弃用依赖 0 项) - 类型安全持续治理:关键路径
@ts-ignore已专项清理,any与弱类型用法仍在分批收敛 - SFTP 模块拆分:将 God Class 拆分为 UploadManager、ArchiveManager、Utils 等职责单一的子模块
- Repository 基类抽象:统一 Repository 层错误处理与日志记录,15+ 文件受益
- 类型化错误体系:新增
DatabaseError、ValidationError、ExternalServiceError等类型安全的错误子类
- 测试框架全面建设:从几乎零测试到 1500+ 测试用例,持续推进 E2E 跳过用例回补
- E2E 测试(Playwright):8 个测试规范,覆盖认证、SSH、SFTP、远程桌面及边缘场景
- 集成测试:SSH/SFTP Mock 服务器、Guacamole 协议测试、Remote Gateway 测试
- 单元测试:Backend 72+ 测试文件,Frontend 31+ 测试文件
- 审计清零(2026-04-13):
npm audit --omit=dev与npm audit均为 0(critical/high/moderate/low 全清零) - 高危漏洞修复:已完成 axios、qs、tar 等依赖的已知高危漏洞修复(CVE/GHSA)
- Dependabot 自动化:配置自动依赖更新,持续监控安全风险
- 依赖 overrides:通过 npm overrides 强制使用安全版本
- 多标签页管理 SSH 与 SFTP 连接
- 支持 RDP/VNC 协议
- 支持 PWA
- 采用 Monaco Editor,支持在线编辑文件
- 集成多重登录安全机制,包括人机验证(hCaptcha、Google reCAPTCHA)与双因素认证(2FA)
- 高度可定制的界面主题与布局风格
- 内置简易 Docker 容器管理面板,便于容器运维
- 支持 IP 白名单与黑名单,异常访问自动封禁
- 通知系统(如登录提醒、异常告警)
- 审计日志,全面记录用户行为与系统变更
- 基于 Node.js 的轻量级后端,资源占用低
- 内置心跳保活机制,确保连接稳定
- 批量命令执行:支持多服务器同时执行命令,实时显示执行进度与结果
- AI 智能助手:内置 AI 运维分析,提供系统健康诊断、命令模式分析、安全事件检测
| 终端界面(Light) |
|---|
![]() |
| 终端界面(Dark) |
|---|
![]() |
| 移动端界面1 | 移动端界面2 |
|---|---|
![]() |
![]() |
建议在 Debian(AMD64 架构)环境中部署,因本人无 ARM 设备,无法保证其兼容性。
新建文件夹
mkdir ./nexus-terminal && cd ./nexus-terminal下载仓库中的 docker-compose.yml 和 .env 文件到当前目录。
wget https://raw.githubusercontent.com/Silentely/nexus-terminal/refs/heads/main/docker-compose.yml -O docker-compose.yml && wget https://raw.githubusercontent.com/Silentely/nexus-terminal/refs/heads/main/.env -O .env
⚠️ 注意:
- arm64 用户请将
docker-compose.yml中的镜像guacamole/guacd:latest替换为guacamole/guacd:1.6.0-RC1。- armv7 用户请参考下方注意事项。
配置 nginx
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:18111;
}
为 docker 配置IPv6(可选,如果你不使用ipv6连接服务器可以不配置)
在/etc/docker/daemon.json加入以下内容
{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"ip6tables": true,
"experimental": true
}重启docker服务
sudo systemctl restart docker
docker compose up -d注意:docker-compose 运行不需要拉取仓库源码,除非你打算自己build,否则只需要在项目目录执行以下命令即可更新。
docker compose downdocker compose pulldocker compose up -d你可以在 SSH 标签页中右键选择“挂起会话”(移动界面长按即可)。一旦挂起,即使网页断开连接,后端也会自动接管并保持 SSH 连接不中断。你可以随时通过面板组件重新恢复会话,整个过程确保编译、长任务等操作不会因网络波动等原因中断。
- 标签页切换:当命令输入框获得焦点时,使用
Alt + ↑/↓切换 SSH 会话标签页,使用Alt + ←/→切换文本编辑器标签页。 - 命令同步(需在设置中开启):开启后,在命令输入框中输入的文字将实时同步到选定的目标输入源。使用
↑/↓键选择菜单命令项,然后按下Enter发送选中的指令。
- 文件快速选择:在文件搜索框获得焦点时,可以使用
↑/↓键快速选择文件。 - 拖拽上传:支持从浏览器外部拖拽文件或文件夹进行上传。注意: 上传大量文件或深层文件夹时,建议先进行打包压缩,以避免浏览器卡死。
- 内部拖拽:可以直接在文件管理器内部拖动文件或文件夹以进行移动。
- 多选操作:按住
Ctrl或Shift键可以选择多个文件或文件夹。 - 右键菜单:提供复制、粘贴、剪切、删除、重命名、修改权限等常用文件操作。
- 同步终端路径:点击工具栏“文件夹”按钮可将文件管理器快速切换到当前终端所在目录,后端会基于当前交互 Shell 读取目录并做跨 Shell 兼容回退(
posix/fish/powershell/cmd)。
- Ctrl + Shift + C 复制,Ctrl + Shift + V 粘贴
- 查看完整命令:当历史命令过长被截断时,将鼠标悬停在命令上即可查看完整的指令内容。
- 缩放:在终端、文件管理器和文本编辑器组件和快捷指令视图中,可以使用
Ctrl + 鼠标滚轮进行缩放。 - 侧栏:展开的侧栏可以通过拖拽调节宽度。
- 标签栏:对于ssh标签栏和文件管理器标签栏可以右键弹出菜单,内容项有:关闭,关闭左侧标签页,关闭其他标签页,关闭右侧标签页。
- 标签分组折叠栏 可以直接点击视图里的标签名字修改标签名称
- 自动重连:在连接断开状态下,可在命令输入框或终端中按回车,或点击连接列表中的同一 SSH 连接以触发自动重连。
- 选择服务器:在批量执行面板中勾选需要执行命令的 SSH 连接,支持全选/取消全选
- 输入命令:在命令输入框中输入要执行的命令,支持 sudo 模式
- 并发控制:可调整并发数(默认 5),控制同时执行任务的数量
- 实时进度:执行过程中显示每个服务器的状态和整体进度
- 查看输出:点击"查看"按钮可查看单个服务器的命令输出
- 取消任务:执行过程中可随时取消所有未完成的任务
- 快速查询:点击预设建议可快速查询系统健康、命令模式、安全事件等
- 自然语言交互:直接输入问题,AI 助手会分析并返回相关数据
- 历史会话:点击历史按钮可查看和恢复之前的会话
- 智能洞察:AI 会自动生成可操作的建议,并按严重程度分类显示
- 移动端可以通过双指手势放大缩小终端字体
- 如需启用 Passkey 登录,请在
.env文件中设置RP_ID和RP_ORIGIN环境变量。
如果你需要配置额外的允许域名访问远程桌面网关(Remote Gateway),请参考 CORS 配置文档。
常见场景:
- 自定义域名访问
- 多域名支持
- 开发环境配置
快速配置:
编辑 docker-compose.yml 中的 remote-gateway 服务:
remote-gateway:
environment:
# 添加允许的域名(逗号分隔)
CORS_ALLOWED_ORIGINS: https://yourdomain.com,https://www.yourdomain.com详细说明请查看 CORS 配置完整文档。
- 双文件管理器:可以在布局中添加两个文件管理器组件(实验性功能,可能存在不稳定情况)。
- 多文本编辑器:在同一布局中添加多个文本编辑器的功能尚未实现。
- ARMv7 用户请使用此处的 docker-compose.yml。由于 Apache Guacamole 未提供 guacd 的 ARMv7 架构镜像,所以禁用 RDP 功能,相关镜像暂时不再拉取。
- 关于数据备份,请自行备份目录下的 data 文件夹,本项目不提供相关备份功能。
- 由于浏览器限制,非https或者localhost无法复制终端内容,请使用https访问
- 预设主题方案来源于优秀的 iTerm2-Color-Schemes 项目。
如果你觉得这个项目对你有帮助,欢迎通过以下方式请我喝杯咖啡:
该仓库采用了一种由人工智能辅助的问题分类(issue triage)工作流程,具体功能包括:
- 识别可能与部署、反向代理(reverse proxy)、身份验证(auth)或特定协议(protocol)相关的问题;
- 提出具体的故障排除步骤;
- 将问题报告者引导至最相关的文档资料;
- 为可能存在的缺陷制定实施计划。
助手可以提供故障排除步骤,或要求用户提供最少的额外信息。除非维护人员明确要求进行代码修改,否则系统不会自动建议进行代码更改。




