Skip to content

Erupt Terminal ​

erupt-terminal uses WebSocket + PTY technology to bridge a server shell directly to the browser. No SSH client is needed β€” you can operate the server terminal from within the admin interface.

Security Notice

The Terminal module can execute arbitrary shell commands, with permissions equivalent to the system user running the Java process. Only grant access to trusted administrators. Always enable HTTPS/WSS encryption in production environments.

Adding the Dependency ​

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

Minimum version required: 1.14.3

No additional configuration is needed after adding the dependency. The module is activated via Spring Boot auto-configuration, and a Terminal menu entry (icon fa fa-terminal) will automatically appear in the admin sidebar.

Features ​

FeatureDescription
Browser TerminalBased on xterm.js; supports full-color rendering, cursor styles, and scroll history
Multiple TabsMultiple independent terminal sessions can be open simultaneously (Alt+T to create new)
Adaptive SizePTY rows/columns are automatically synced when the window is resized
Cross-PlatformUnix/Linux uses $SHELL or /bin/bash; Windows uses cmd.exe
Idle TimeoutAutomatically disconnects after 30 minutes of inactivity to free server resources
Permission ControlIntegrates with erupt-upms; uses dual verification via Token + menu permissions
Auto-ReconnectAutomatically retries on network interruption, up to 8 times with exponential backoff

Preview ​

Upon successful connection, the terminal displays a banner with the current hostname, operating system and Java version, then drops into an interactive shell. The TABS panel on the left keeps several sessions side by side:

Erupt Terminal

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

How This Differs from erupt-remote ​

Both modules put a terminal in the browser, but not on the same machine:

erupt-terminalerupt-remote
TargetThe host running erupt itself β€” fixed, not selectableOther managed machines, kept as records in the Remote Host table
TransportA local PTY: it forks a shell processNetwork protocols: SSH (jsch) or VNC (RFB)
CapabilityShell terminalShell terminal plus a graphical desktop
IdentityThe system user running the Java process β€” no credentials to enterPer-host account / password / private key, stored AES-GCM encrypted
SessionsMultiple tabs, disconnected after 30 idle minutesOne-time ticket + global concurrency cap + idle reaping
PermissionThe terminal menu permissionThe RemoteHost menu permission (checked on the ticket API and again on the WebSocket)
WebSocket path/erupt-terminal/erupt-remote
Target preparationNoneSSH uses the system's sshd; VNC needs a VNC server on the target

In short: use erupt-terminal to operate the machine erupt itself runs on; use erupt-remote to manage a fleet of servers, or when you need a graphical desktop. Neither depends on the other, and both can be installed together.

Permission Configuration ​

The module uses erupt-upms for access control. Access requires both:

  1. Valid Token β€” the request must carry the current logged-in user's erupt-token
  2. Menu Permission β€” the user's role must be bound to the terminal menu

Assign the Terminal menu to the relevant roles in Role Management to control who has access.

Contributors

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

Changelog

Released under the Apache-2.0 License.