Backend Go 1.23+ : - API REST + WebSocket (chi, gorilla/websocket) - Authentification PAM via SSH + JWT RS256 - Chiffrement AES-256-GCM pour secrets SQLite - Pool SSH, client Proxmox REST, hub WebSocket pub/sub - Système de modules compilés à initialisation conditionnelle - Audit log, migrations SQLite versionnées Frontend Vue 3 + Vite + TypeScript : - Thème Neumorphism sombre/clair (CSS custom properties) - Wizard d'installation, Dashboard drag-drop, Terminal xterm.js - Toutes les vues CORE + stubs modules optionnels - i18n EN/FR (vue-i18n v11) Infrastructure : - Docker multi-stage (Go → alpine, Node → nginx) - docker-compose.yml, .gitattributes, LICENSE MIT, README Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.6 KiB
1.6 KiB
Module — Terminal
Type: Optional (disabled by default)
Interactive SSH terminal in the browser. Connects to the Proxmox host (or any SSH-accessible target) and opens a full PTY session via WebSocket.
Features
- Full PTY support (
xterm-256color, interactive shell) - Responsive resizing — the terminal adjusts when the browser window is resized
- Terminal theme matches the panel's Neumorphism dark/light design
- Audit log entry on open and close
WebSocket Endpoint
GET /ws/terminal?token=<jwt>&host=<optional-override>
If host is not specified, the SSH host configured during installation is used.
Message Format
Client → Server (keyboard input): raw binary bytes
Client → Server (resize event): JSON text frame
{ "type": "resize", "cols": 120, "rows": 40 }
Server → Client (terminal output): raw binary bytes
Frontend
Uses xterm.js with the following addons:
@xterm/addon-fit— auto-resize to container dimensions@xterm/addon-attach— attach xterm directly to a WebSocket
How It Works
- WebSocket connection is established and JWT is validated
- Backend opens an SSH connection using stored credentials
- A PTY session is requested (
xterm-256color, initial size 80×24) - An interactive shell is launched
- All data flows bidirectionally: WebSocket ↔ SSH ↔ PTY
Requirements
- SSH access to the target host (password authentication)
- The
ssh_host,ssh_username,ssh_passwordsettings must be configured
License
MIT — see LICENSE