Skip to content

Erupt Terminal 服务终端

erupt-terminal 通过 WebSocket + PTY 技术,将服务器 Shell 直接桥接到浏览器,无需 SSH 客户端即可在后台管理界面中操作服务器终端。

安全提示

Terminal 模块可执行任意 Shell 命令,权限等同于运行 Java 进程的系统用户。仅应授权给受信任的管理员,生产环境务必启用 HTTPS/WSS 加密。

引入方式

xml
<dependency>
  <groupId>xyz.erupt</groupId>
  <artifactId>erupt-terminal</artifactId>
  <version>${erupt.version}</version>
</dependency>

最低版本要求:1.14.3

引入后无需任何配置,模块通过 Spring Boot 自动装配生效,后台菜单中自动出现 Terminal 入口(图标 fa fa-terminal)。

功能特性

特性说明
浏览器终端基于 xterm.js,支持全色彩渲染、光标样式、滚动历史
多标签页可同时开启多个独立终端会话(Alt+T 新建)
终端尺寸自适应窗口 resize 时自动同步 PTY 行列数
跨平台Unix/Linux 使用 $SHELL/bin/bash,Windows 使用 cmd.exe
空闲超时30 分钟无操作自动断开,释放服务器资源
权限校验集成 erupt-upms,通过 Token + 菜单权限双重验证
自动重连网络中断后自动重试,最多 8 次,指数退避

效果预览

连接成功后,终端会展示当前主机名、操作系统、Java 版本等信息横幅,随后进入可交互的 Shell。左侧 TABS 面板管理多个并行会话:

Erupt Terminal

───────────────────────────────────────
  Erupt Terminal  v1.14.3
  Host : my-server
  OS   : Linux 5.15.0  amd64
  Java : 17.0.9
───────────────────────────────────────
[root@my-server ~]$

与 erupt-remote 的区别

两个模块都把终端搬进了浏览器,但连的不是同一台机器

erupt-terminalerupt-remote
连接目标erupt 服务自身所在的主机,固定,不可选择受管的其他主机,在「远程主机」表格中按条目维护
连接方式本机 PTY(伪终端),直接 fork 一个 Shell 进程网络协议:SSH(jsch)或 VNC(RFB)
能力Shell 终端Shell 终端 + 图形桌面
身份运行 Java 进程的系统用户,无需填账号密码每台主机各自的账号 / 密码 / 私钥,AES-GCM 加密存储
会话管理多标签页,30 分钟空闲断开一次性票据 + 全局并发上限 + 空闲回收
权限terminal 菜单权限RemoteHost 菜单权限(票据接口与 WebSocket 各校验一次)
WebSocket 路径/erupt-terminal/erupt-remote
目标主机准备无需任何准备SSH 用系统自带 sshd;VNC 需目标主机运行 VNC 服务端

一句话选型:运维 erupt 自己所在的那台机器用 erupt-terminal;管理一批服务器、或者需要图形桌面用 erupt-remote。两者互不依赖,可同时引入。

权限配置

模块使用 erupt-upms 进行权限管控,访问时需同时满足:

  1. 有效 Token — 请求携带当前登录用户的 erupt-token
  2. 菜单权限 — 用户角色已绑定 terminal 菜单

在角色管理中将 Terminal 菜单授权给对应角色即可控制访问范围。

贡献者

The avatar of contributor named as YuePeng YuePeng
The avatar of contributor named as Claude Opus 5 (1M context) Claude Opus 5 (1M context)

页面历史

Released under the Apache-2.0 License.