MCPcopy
hub / github.com/Heavrnl/nexus-terminal

github.com/Heavrnl/nexus-terminal @v0.8.1 sqlite

repository ↗ · DeepWiki ↗ · release v0.8.1 ↗
1,371 symbols 2,715 edges 202 files 147 documented · 11%
README

banner.png

Docker License: GPL-3.0

中文 | English

📖 概述

星枢终端(Nexus Terminal) 是一款现代化、功能丰富的 Web SSH / RDP / VNC 客户端,致力于提供高度可定制的远程连接体验。提供独立的本地桌面端。

✨ 功能特性

  • 多标签页管理 SSH 与 SFTP 连接
  • 支持 RDP/VNC 协议
  • 支持 PWA
  • 采用 Monaco Editor,支持在线编辑文件
  • 集成多重登录安全机制,包括人机验证(hCaptcha、Google reCAPTCHA)与双因素认证(2FA)
  • 高度可定制的界面主题与布局风格
  • 内置简易 Docker 容器管理面板,便于容器运维
  • 支持 IP 白名单与黑名单,异常访问自动封禁
  • 通知系统(如登录提醒、异常告警)
  • 审计日志,全面记录用户行为与系统变更
  • 基于 Node.js 的轻量级后端,资源占用低
  • 内置心跳保活机制,确保连接稳定

📸 截图

终端界面(Light)
workspace_light.png

终端界面(Dark)
workspace_darker.png

移动端界面1 移动端界面2
1746339196937.png 1746339222136.png

🖥️ 桌面端

移除了web端的特有功能,如各种登录验证,会话挂起等功能

https://github.com/Heavrnl/nexus-terminal/releases/latest

🚀 快速开始

1️⃣ 配置环境

建议在 Debian(AMD64 架构)环境中部署,因本人无 ARM 设备,无法保证其兼容性。

新建文件夹

mkdir ./nexus-terminal && cd ./nexus-terminal

下载仓库中的 docker-compose.yml.env 文件到当前目录。

wget https://raw.githubusercontent.com/Heavrnl/nexus-terminal/refs/heads/main/docker-compose.yml -O docker-compose.yml && wget https://raw.githubusercontent.com/Heavrnl/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

2️⃣ 启动服务

docker compose up -d

3️⃣ 更新

注意:docker-compose 运行不需要拉取仓库源码,除非你打算自己build,否则只需要在项目目录执行以下命令即可更新。

docker compose down
docker compose pull
docker compose up -d

📚 使用指南

挂起会话组件

你可以在 SSH 标签页中右键选择“挂起会话”(移动界面长按即可)。一旦挂起,即使网页断开连接,后端也会自动接管并保持 SSH 连接不中断。你可以随时通过面板组件重新恢复会话,整个过程确保编译、长任务等操作不会因网络波动等原因中断。

命令输入框组件

  1. 标签页切换:当命令输入框获得焦点时,使用 Alt + ↑/↓ 切换 SSH 会话标签页,使用 Alt + ←/→ 切换文本编辑器标签页。
  2. 命令同步(需在设置中开启):开启后,在命令输入框中输入的文字将实时同步到选定的目标输入源。使用 ↑/↓ 键选择菜单命令项,然后按下 Enter 发送选中的指令。

文件管理器组件

  1. 文件快速选择:在文件搜索框获得焦点时,可以使用 ↑/↓ 键快速选择文件。
  2. 拖拽上传:支持从浏览器外部拖拽文件或文件夹进行上传。注意: 上传大量文件或深层文件夹时,建议先进行打包压缩,以避免浏览器卡死。
  3. 内部拖拽:可以直接在文件管理器内部拖动文件或文件夹以进行移动。
  4. 多选操作:按住 CtrlShift 键可以选择多个文件或文件夹。
  5. 右键菜单:提供复制、粘贴、剪切、删除、重命名、修改权限等常用文件操作。

终端组件

  1. Ctrl + Shift + C 复制,Ctrl + Shift + V 粘贴

历史命令组件

  1. 查看完整命令:当历史命令过长被截断时,将鼠标悬停在命令上即可查看完整的指令内容。

通用操作

  1. 缩放:在终端、文件管理器和文本编辑器组件和快捷指令视图中,可以使用 Ctrl + 鼠标滚轮 进行缩放。
  2. 侧栏:展开的侧栏可以通过拖拽调节宽度。
  3. 标签栏:对于ssh标签栏和文件管理器标签栏可以右键弹出菜单,内容项有:关闭,关闭左侧标签页,关闭其他标签页,关闭右侧标签页。
  4. 标签分组折叠栏 可以直接点击视图里的标签名字修改标签名称
  5. 自动重连:在连接断开状态下,可在命令输入框或终端中按回车,或点击连接列表中的同一 SSH 连接以触发自动重连。

其他

  1. 移动端可以通过双指手势放大缩小终端字体
  2. 如需启用 Passkey 登录,请在 .env 文件中设置 RP_IDRP_ORIGIN 环境变量。

⚠️ 注意事项

  1. 双文件管理器:可以在布局中添加两个文件管理器组件(实验性功能,可能存在不稳定情况)。
  2. 多文本编辑器:在同一布局中添加多个文本编辑器的功能尚未实现。
  3. ARMv7 用户请使用此处的 docker-compose.yml。由于 Apache Guacamole 未提供 guacd 的 ARMv7 架构镜像,所以禁用 RDP 功能,相关镜像暂时不再拉取。
  4. 关于数据备份,请自行备份目录下的 data 文件夹,本项目不提供相关备份功能。
  5. 由于浏览器限制,非https或者localhost无法复制终端内容,请使用https访问

💐 致谢

☕ 捐赠

如果你觉得这个项目对你有帮助,欢迎通过以下方式请我喝杯咖啡:

ko-fi

📄 开源协议

本项目采用 GPL-3.0 开源协议,详细信息请参阅 LICENSE 文件。

Extension points exported contracts — how you extend this code

INotificationSender (Interface)
(no doc) [6 implementers]
packages/backend/src/notifications/notification.dispatcher.service.ts
RecursiveStringRecord (Interface)
(no doc)
packages/frontend/src/i18n.ts
SessionData (Interface)
(no doc)
packages/backend/src/index.ts
AuditLogEntry (Interface)
(no doc)
packages/frontend/src/types/audit.types.ts
ProxyData (Interface)
(no doc)
packages/backend/src/proxies/proxy.service.ts
UploadItem (Interface)
(no doc)
packages/frontend/src/types/upload.types.ts
CreateProxyInput (Interface)
(no doc)
packages/backend/src/proxies/proxy.service.ts
SuspendedSshSession (Interface)
(no doc)
packages/frontend/src/types/ssh-suspend.types.ts

Core symbols most depended-on inside this repo

send
called by 171
packages/backend/src/notifications/notification.dispatcher.service.ts
on
called by 142
packages/backend/src/types/archiver-zip-encrypted.d.ts
getDbInstance
called by 105
packages/backend/src/database/connection.ts
runDb
called by 89
packages/backend/src/database/connection.ts
delete
called by 70
packages/backend/src/notifications/notification.repository.ts
onMessage
called by 41
packages/frontend/src/composables/useWebSocketConnection.ts
logAction
called by 38
packages/backend/src/audit/audit.service.ts
encrypt
called by 28
packages/backend/src/utils/crypto.ts

Shape

Function 890
Interface 234
Method 192
Class 54
Enum 1

Languages

TypeScript100%

Modules by API surface

packages/frontend/src/stores/appearance.store.ts48 symbols
packages/backend/src/sftp/sftp.service.ts41 symbols
packages/frontend/src/types/websocket.types.ts38 symbols
packages/frontend/src/composables/useSftpActions.ts35 symbols
packages/backend/src/websocket/types.ts31 symbols
packages/backend/src/settings/settings.service.ts31 symbols
packages/backend/src/transfers/transfers.service.ts27 symbols
packages/frontend/src/stores/auth.store.ts25 symbols
packages/backend/src/settings/settings.controller.ts25 symbols
packages/frontend/src/stores/session.store.ts23 symbols
packages/frontend/src/stores/layout.store.ts23 symbols
packages/backend/src/appearance/appearance.service.ts23 symbols

Dependencies from manifests, versioned

@codemirror/commands6.8.1 · 1×
@codemirror/lang-cpp6.0.2 · 1×
@codemirror/lang-go6.0.1 · 1×
@codemirror/lang-java6.0.1 · 1×
@codemirror/lang-json6.0.1 · 1×
@codemirror/lang-markdown6.3.2 · 1×
@codemirror/lang-php6.0.1 · 1×
@codemirror/lang-python6.2.1 · 1×
@codemirror/lang-rust6.0.1 · 1×
@codemirror/lang-sql6.9.0 · 1×
@codemirror/lang-xml6.1.0 · 1×
@codemirror/lang-yaml6.1.2 · 1×

For agents

$ claude mcp add nexus-terminal \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact