Zum Hauptinhalt springen

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 htop oder nano erhalten 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: exit oder 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.