Terminal
Root-Shell im Browser.
Terminal öffnet eine root-Shell (/bin/bash -l) direkt im Browser. Befehle wirken sofort und ohne Rückfrage – das Terminal ist für Wartung und Fehlersuche gedacht, alles Übliche geht über die Oberfläche.
Bedienung
- Mehrere Terminals: Neues Terminal öffnet bis zu vier Shells als Tabs auf der Seite. Jede Shell läuft, solange die Seite offen ist; ein Seitenwechsel beendet sie.
- Größe: Das Terminal passt sich dem Fenster an; Programme wie
htopodernanoerhalten die neue Größe sofort. Vollbild nutzt den ganzen Bildschirm, A−/A+ ändern die Schriftgröße (wird im Browser gemerkt). - Kopieren und Einfügen: markieren und Strg+Umschalt+C, einfügen mit Strg+Umschalt+V (Strg+C bleibt Abbrechen in der Shell).
- Mobilgeräte: Eine Leiste mit Esc, Tab, Strg+C, Strg+D und Pfeiltasten ergänzt die Bildschirmtastatur.
- Ende:
exitoder Strg+D beendet die Shell; Neu verbinden öffnet eine neue.
Offene Sitzungen
Die Tabelle Offene Sitzungen zeigt alle Terminal- und Konsolensitzungen aller Admins (Benutzer, Adresse, Ziel, geöffnet, letzte Eingabe). Sitzung beenden schließt eine Sitzung und beendet alle darin laufenden Programme – auch eine vergessene Shell in einem anderen Browser. Gleichzeitig sind höchstens 8 root-Shells möglich (Konsolen der Virtualisierung zählen nicht mit), pro Admin insgesamt 16 WebSocket-Verbindungen.
Sicherheit
- Nur angemeldete Admins mit abgeschlossener zweiter Stufe (Sicherheit); der Browser muss von derselben Adresse kommen (Prüfung von
Origin). Die Sitzung wird alle 30 Sekunden erneut geprüft: Abmelden, Ablauf oder Entzug der Admin-Rechte schließen die Shell. Nur Eingaben halten die Anmeldung aktiv; ein offenes, unbenutztes Terminal endet mit dem Leerlauf-Timeout der Sitzung. - Öffnen und Schließen jeder Shell stehen im Audit-Log (
terminal.open,terminal.close, mit Benutzer, Adresse und Sitzungs-ID), ebenso Sitzung beenden (terminal.session.close). Die Eingaben selbst werden nicht protokolliert. - Über HTTP laufen Eingaben unverschlüsselt durchs Netz; für Zugriffe außerhalb des eigenen LANs HTTPS einschalten.
Technik
Der Browser verbindet sich per WebSocket mit /api/ws/terminal?cols=…&rows=… (Gateway in server/preload.cjs). Ausgaben kommen als Binär-Frames, Eingaben und Größenänderungen als JSON ({ "type": "input", "data": … }, { "type": "resize", "cols": …, "rows": … }). Das Pseudo-Terminal entsteht ohne native Node-Module über script -qfec aus util-linux; Größenänderungen setzt stty -F /dev/pts/N, der Kernel schickt dem Programm dann SIGWINCH. Bei langsamer Verbindung wird die Ausgabe ab 4 MiB Puffer angehalten, bis der Browser aufgeholt hat. Beim Schließen bekommt die Shell SIGHUP, nach 3 Sekunden SIGKILL. Dieselbe Komponente dient als Konsole von Containern und VMs unter Virtualisierung.
Mock-Modus
Im Mock-Modus antwortet ein Echo-Terminal: Es gibt Eingaben zurück, beantwortet stty size und endet mit exit. Es läuft auch unter Windows.