ADMIN

2024

07

2024-06-27T12:00:00

Industrievernetzung

PRAXIS

042

Terminalprogramm

Kommandozeile

Vier praktische Shell-Tools

Echte Perlen

von Andreas Stolzenberger

Veröffentlicht in Ausgabe 07/2024 - PRAXIS

Administratoren verbringen viel Zeit in der einen oder anderen Shell, um darüber lokale und entfernte Systeme oder Geräte zu steuern. Jedes Client-OS bringt mehrere Shell-Tools mit. Darüber hinaus gibt es für verschiedene Anwendungsgebiete Terminaltools, die mehr Komfort und Funktionalität versprechen. Wir stellen vier interessante Werkzeuge vor, die alle ihre eigenen Akzente setzen.

Zwar genügen die Funktionen der betriebssystemeigenen CLI-Clients für alltägliche Aufgaben, aber komfortabel sind sie nicht unbedingt. Wer beispielsweise Verbindungen mit speziellen Parametern aufbauen möchte, muss dazu lange Kommandos tippen oder besondere Schlüssel in die SSH-Konfiguration eintragen. Es geht jedoch einfacher: Eine Reihe von Tools vereinfacht den Umgang mit SSH-Verbindungen und liefert zusätzliche Komfortfunktionen wie Editoren oder Host-basiertes Scripting. Wir stellen im Folgenden vier dieser Verbindungstools vor, die sich für ganz unterschiedliche Einsatzgebiete eignen.
ZOC: Alter Hase
Das erste vorgestellte Tool ist vielleicht älter als der ein oder andere Leser dieses Artikels. "Zap o Com" [1] (ZOC) von Emtec aus Nürnberg wurde erstmals 1993 als Terminalprogramm für das Betriebssystem OS/2 vorgestellt. Zu dieser Zeit ging es noch nicht um SSH-Verbindungen. ZOC diente primär als Terminalprogramm für serielle Verbindungen mit analogen Modems, die damals mit Protokollen wie V32bis bei Geschwindigkeiten von 14.400 Bit/s arbeiteten. Bereits die frühen Versionen setzten auf Automatisierung. Die Gegenstellen besaßen damals weder Rest-APIs noch fernsteuerbare Skript-Engines. Um Verbindungen zu automatisieren, musste ZOC Skripte lokal laufen lassen im Stil von:
- Sende Zeichenfolge "xyz",
Zwar genügen die Funktionen der betriebssystemeigenen CLI-Clients für alltägliche Aufgaben, aber komfortabel sind sie nicht unbedingt. Wer beispielsweise Verbindungen mit speziellen Parametern aufbauen möchte, muss dazu lange Kommandos tippen oder besondere Schlüssel in die SSH-Konfiguration eintragen. Es geht jedoch einfacher: Eine Reihe von Tools vereinfacht den Umgang mit SSH-Verbindungen und liefert zusätzliche Komfortfunktionen wie Editoren oder Host-basiertes Scripting. Wir stellen im Folgenden vier dieser Verbindungstools vor, die sich für ganz unterschiedliche Einsatzgebiete eignen.
ZOC: Alter Hase
Das erste vorgestellte Tool ist vielleicht älter als der ein oder andere Leser dieses Artikels. "Zap o Com" [1] (ZOC) von Emtec aus Nürnberg wurde erstmals 1993 als Terminalprogramm für das Betriebssystem OS/2 vorgestellt. Zu dieser Zeit ging es noch nicht um SSH-Verbindungen. ZOC diente primär als Terminalprogramm für serielle Verbindungen mit analogen Modems, die damals mit Protokollen wie V32bis bei Geschwindigkeiten von 14.400 Bit/s arbeiteten. Bereits die frühen Versionen setzten auf Automatisierung. Die Gegenstellen besaßen damals weder Rest-APIs noch fernsteuerbare Skript-Engines. Um Verbindungen zu automatisieren, musste ZOC Skripte lokal laufen lassen im Stil von:
- Sende Zeichenfolge "xyz",
- warte auf Antwort
- wenn Antwort = "a", dann Sende "xxx",
- sonst sende "yyy".
Als Skript-Engine setzte ZOC das ein, was 1993 auf OS/2 zur Verfügung stand: Rexx. Diese 1979 erstmals von IBM vorgestellte Programmiersprache gab es sowohl auf IBM Mainframes als auch auf OS/2. In der Zwischenzeit existieren eine ganze Reihe freier Rexx-Interpreter, unter anderem "Regina" [2], das das aktuelle ZOC 8 einsetzt. Nach dem Ableben von OS/2 stellte Emtec die OS/2-Version ein und bot zusätzlich zur Windows-Version ab ZOC 6 auch eine Mac-Variante.
Über die Zeit rüstete der Hersteller immer mehr Verbindungs- und Kommunikationsprotokolle nach. Heute beherrscht ZOC zwar nach wie vor Modems und serielle Verbindungen, konzentriert sich mittlerweile jedoch auf SSH und Telnet. Neben den üblich verdächtigen ANSI-Terminalemulationen kann ZOC auch TN3270-(OS/390)- und TN5250-(OS/400)-Verbindungen aufbauen. Die Rexx-Integration ist geblieben, mit einer Fülle von ZOC-eigenen Kommandoerweiterungen für die Skriptsprache.
In einem Adressbuch sammelt ZOC die Verbindungen des Benutzers. Dabei kann jeder Eintrag individuelle Parameter aufnehmen. Das ist vor allem dann praktisch, wenn Anwender verschiedene Schlüsselpaare für die Connections oder andere Protokollparameter nutzen oder eine Verbindung via Jump-Host/Proxy tunneln müssen.
Das aktuelle ZOC 8 lässt in Sachen Protokollen kaum Wünsche offen. Selbst Dateitransfers mit dem fast schon vergessenen Zmodem-Transferprotokoll sind nach wie vor möglich. Wer sich mit Rexx noch nicht so gut auskennt, kann für wiederkehrende Prozeduren erst einmal einen Makrorekorder benutzen, der Anhand interaktiver Aktionen ein Skript erstellt. Das liefert die passende Grundlage und lässt sich später anpassen.
Der Kommunikationsaltmeister ZOC gehört seit 30 Jahren zu den leistungsstärksten Kommunikationstools. Es hat die Zeit gut überdauert, da der Entwickler stets modere Funktionen nachgerüstet hat. Neben der Vielzahl der Protokolle spricht für ZOC vor allem die Rexx-Integration, mit der sich Verbindungen auf Clientseite automatisieren lassen, selbst oder gerade wenn die kontaktierte Gegenstelle nicht selbst über Skriptfunktionen verfügt. Sie können ZOC als kostenfreie Testversion für 30 Tage herunterladen. Nach Ablauf der Testphase wird ZOC den Betrieb nicht einstellen, Sie aber regelmäßig daran erinnern, dass Sie die Vollversion für 79 Euro erwerben müssen.
Bild 1: ZOC offeriert so viele Verbindungs- und Protokolloptionen wie kaum ein anderes Terminalprogramm.
Visual Studio Code: Editor mit Fernverbindung
Keine Sorge, Sie befinden sich nach wie vor im Artikel zum Thema SSH-Clients und -Tools, selbst wenn es im folgenden Abschnitt um Microsofts Editor "Visual Studio Code" (Vscode) [3] geht. Viele Administratoren nutzen SSH-Verbindungen in erster Linie, um auf Linux- oder Windows-Zielsystemen Kommandos auszuführen, Logdateien einzusehen und Konfigurationsdateien anzupassen. Für den Visual Studio Code Editor existiert eine Vielzahl von Plug-ins, darunter mit "Remote SSH" auch ein SSH-Client. Der kann dabei jedoch mehr, als nur eine simple Shell zu öffnen.
Für Vscode gibt es einen Server, der auf Windows, Linux oder macOS läuft. Verbindet sich das SSH-Plug-in des Editors mit einer Gegenstelle, kann der Administrator dort automatisch den Vscode-Server einrichten und starten lassen. Dann können – dank des lokalen Editors bequem und mit allem Komfort der lokalen Syntax-Plug-ins – Dateien auf dem per SSH angebundenen System editiert werden. Das Plug-in bringt auch ein simples Terminalfenster mit. Tippen Sie hier, und damit auf dem Remote-System, beispielsweise das Kommando code datei.txt ein, lädt die lokal laufende Vs-code-Instanz das Remote-File "datei.txt" via Codeserver in ein Editorfenster. Für den Admin macht es visuell keinen Unterschied, ob er lokale oder entfernte Dateien in seinem Editor bearbeitet. Die erweiterten Funktionen von Vscode wie Syntax-Highlighting oder Auto-Formatierung vereinfachen den Umgang mit den Konfigurationsdateien. Das ist für den Administrator komfortabler, als im SSH-Terminal Texteditoren wie vi oder nano bemühen zu müssen.
Für die SSH-Erweiterung gibt es ein weiteres Zusatz-Plug-in, den "Remote Explorer", der sich auf der linken Menüleiste des Editors zeigt. Dieser listet zuvor konfigurierte Remote-Verbindungen auf, sodass der Anwender SSH-Verbindungen mit einem simplen Mausklick starten kann. Die Konfiguration des Remote-Explorers legt Vscode nicht in einem proprietären Format, sondern in der regulären SSH-Konfigurationsdatei "~/.ssh/ config" oder einer anderen Konfigurationsdatei freier Wahl ab.
Microsofts freier Editor eignet sich mit den beiden Zusatz-Plug-ins perfekt als SSH-Client, wenn der Admin in erster Linie Verbindungen zu Clientsystemen mit Vscode-Server-Kompatibilität herstellt und dort Textdateien bearbeiten will. Der Editor steht kostenfrei für Windows, macOS oder Linux zur Verfügung. Einmal installiert, fügen Sie im laufenden Editor die beiden SSH-Plug-ins hinzu.
Bild 2: Der Anwender bearbeitet seine dnsmasq-Konfiguration auf dem per SSH verbundenen Rechner "NUC", als wäre es eine lokale Datei.
Xpipe: Flexibler Vermittler
Einen anderen Ansatz zum Thema SSH-Verbindungen verspricht das relativ junge Tool Xpipe, dessen erstes "stable" Release 1.0 im Mai 2023 veröffentlicht wurde. Anders als Vscode oder ZOC bringt es keinen eigenen SSH-Client mit. Die Macher bezeichnen Xpipe als "Shell Connection Hub". Es verwaltet Verbindungsinformationen, ruft für die eigentliche Verbindung dann aber eines der bestehenden Standardtools auf. Ganz ohne Verbindungsfunktion geht es dann aber nicht. Xpipe integriert einen Dateimanager mit SFTP/SCP, sodass Anwender darüber lokale Dateien zu Clients senden oder von diesen empfangen können.
Welche Shell oder welchen Editor Xpipe startet, legen Nutzer in der Konfiguration fest. Beim ersten Start müssen glücklicherweise nicht alle Verbindungen manuell erzeugt werden. Xpipe offeriert einen Scanner, der lokale Dateien wie die "~/.ssh/config", die "Kubeconfig", die Podman-Konfiguration oder auch die definierten WSL-Sitzungen scannt und daraufhin automatisch ein Verzeichnis erstellt. Die Verbindungskonfiguration legt Xpipe in einer eigenen Verzeichnisstruktur unterhalb des Benutzerverzeichnisses ab und verschlüsselt diese bei Bedarf. Auf Wunsch gleicht das Tool diese Konfiguration mit einem Git-Repository ab, sodass Anwender die Xpipe-Settings und -Verzeichnisse auf mehreren Clientrechnern abgleichen können.
Die SSH-Client-Konfiguration lässt den ein oder anderen Wunsch offen. So lassen sich Verbindungen mit Passwort- oder Key-Authentisierung anlegen, wobei Xpipe auch ein Custom-Command involvieren kann, um ein Passwort von einem externen Vault wie Hashicorp abzurufen. Allerdings fehlt es an komplexeren Setupoptionen. ZOC beispielsweise wickelt SSH-Verbindungen via Socks-Proxies oder Jump-Server (Bastion Hosts) ab, was Xpipe in der aktuellen Version (8.6) nicht beherrscht.
Xpipe speichert Benutzerskripte für die unterstützten Shells, wie unter anderem Bash, ZSH oder PowerShell. Allerdings lassen sich diese Skripte nicht einzelnen Hosts oder Host-Gruppen zuweisen. Xpipe kennt für Skripte nur zwei Optionen. Mit "Run on Init in all compatible shells" startet die Software nach dem Log-in ein Bash-Skript auf allen Zielen mittels Bash-Shell. Optional kopiert Xpipe das Skript auf die Zielsysteme, sodass der Administrator sie dort individuell starten kann, dann aber wiederum ebenfalls an alle kompatiblen Hosts. Das schränkt diese Funktion massiv ein, weil sie sich so nur für ein generisches Init-Skript auf allen Maschinen eines Typs eignet. Hier wäre eine feinere Abgrenzung wünschenswert, etwa in Bezug auf Maschinen einer Gruppe, eines bestimmten Typs oder einer OS-Variante. In ZOC besteht beispielsweise die Möglichkeit, jedem Host ein individuelles Login-Skript zuzuweisen.
Mit dem integrierten Filemanager kopiert Xpipe Daten von und zu verbundenen Hosts. Das Drag-and-Drop von Dateien via UI funktioniert dabei aber nur mit Filemanager-Fenstern innerhalb des Tools. Xpipe, das auf macOS, Windows und Linux läuft, bringt für keines der Systeme eine Desktopintegration mit, die Drag-and-Drop zwischen dem OS-eigenen Dateimanager und dem von Xpipe erlaubt. Andere Multi-OS-SFTP-Tools wie beispielsweise Filezilla können das auf allen unterstützten Plattformen. Der Dateimanager dient Xpipe auch dazu, Remote-Files mit einem lokalen Editor zu bearbeiten. Das Tool kopiert dazu die entfernte Datei in ein lokales, temporäres Verzeichnis und öffnet sie dann im vom Anwender bestimmten Editor. Nach dem Speichern transferiert Xpipe die geänderte Datei zurück.
Der Source-Code von Xlab steht im Git-Repository unter [4] zur Verfügung, jedoch ist das Tool nicht komplett Open Source. Der Hersteller bezeichnet seine Lizenz-Policy als "Open Core Model". Dabei soll die Basisapplikation selbst Open Source und kostenfrei sein, während erweiterte Komponenten Closed Source und damit kostenpflichtig bleiben. Das stimmt so aber nur teilweise. Im Test stellt Xpipe beispielsweise keine Verbindung zu Kubernetes-Clustern her, weil dieses Modul eine Pro-Lizenz verlangt. Aber bei simplen SSH-Verbindungen macht Xpipe die Lizenz nicht von der Funktion, sondern vom Zielsystem abhängig. Verbindungen zu Rechnern und VMs mit Debian-, Fedora- oder CentOS-Streams baut Xpipe auf, lehnt es im Gegenzug jedoch ohne Pro-Lizenz ab, mit RHEL zu kommunizieren.
Xpipe ist in Java programmiert, was leider recht deutlich zu spüren ist. Beim Start des Programms oder einzelner Verbindungen kann es die ein oder andere Sekunde dauern, bis Xpipe reagiert. Gerne klicken Nutzer dann mehrfach auf das Verbindungs-Icon, sodass nach einer Verzögerung plötzlich mehrere SSH-Fenster für den gewählten Host aufspringen.
Der Ansatz eines flexiblen Connection Brokers mit integriertem SSH-Dateimanager gefällt, aber die aktuelle Implementierung der Version 8.6 lässt noch viele Wünsche offen. Drag-and-Drop von Dateien zu den regulären Filemanager-Fenstern sollte ebenso selbstverständlich funktionieren wie individuelle Init-Skripte. Aber das Tool ist noch jung und die Entwickler veröffentlichen sehr regelmäßig Bugfixes und fügen neue Funktionen hinzu. Das Tool steht auf der bereits genannten URL kostenfrei zum Download für Mac, Linux und Windows bereit. Für die Pro-Version verlangt der Hersteller 50 Euro.
Bild 3: Das Verzeichnis listet alle automatisch erkannten Verbindungen des Windows-Clients auf. Verbindungen zu RHEL-Instanzen lehnt Xpipe ohne Pro-Lizenz jedoch mit "Connection failed" ab.
Tabby: Keep it simple
Die Macher bewerben ihr Open-Source Tool "Tabby" [5] als "A terminal for the modern age". Das schlichte Tool vereinigt die üblich verdächtigen Shell-Typen wie SSH, PowerShell, ZSH oder Bash in einem aufgeräumten Fenster. Das Terminal unterstützt Tabs und Screen Splitting. Nahezu jede Funktion der Software lässt sich anpassen und mit einem Hotkey versehen. Je nach OS unterstützt Tabby lokale Shell-Varianten. Auf Windows beispielsweise erkennt es bestehende WSL- oder Cygwin-Setups. Nutzer können ein Adressbuch ähnlich wie ZOC oder Xpipe erstellen und dann über einen Klick eine Verbindung zum gewählten Ziel öffnen.
Die Konfiguration dieser Profile ist nicht so umfangreich wie beispielsweise bei ZOC – zumindest in der UI-Konfiguration. In Tabbys Konfigurationsdatei "config.yaml" ließen sich weitere Optionen manuell eintragen. Allerdings mangelt es dem File an Übersicht. Aus irgendeinem Grund schrieb das Tool in unserem Setup die SVG-Dateien der Icons verschiedener Profileinträge als XML-Klartext in die "config.yaml". Damit bestand die Hälfte der Datei aus Mime-Code und war nicht mehr wirklich "human readable". Hier sollte ein Link auf eine binäre SVG-Datei genügen.
Tabby integriert, ähnlich wie Xpipe, einen Vault, um die Konfiguration und individuelle Keys verschlüsselt ablegen zu können. Der Umgang mit dem Tresor gestaltet sich jedoch recht umständlich. Mit aktivem Vault und verschlüsselter Config-Datei fragt Tabby eigentlich ständig nach dem Master-Passwort, denn die Kennworteingabe des Benutzers bleibt nur eine Minute lang gültig.
Tabby ist ein hübsches Terminal mit vielen Konfigurationsoptionen und modernen Tiling-Funktionen. Besonders gut eignet sich das Tool für Admins, die auf wechselnden Clientsystemen arbeiten. Wer andauernd zwischen PowerShell, xterm und ZSH als Client hin- und herwechseln muss, freut sich über ein einheitliches Terminal auf allen verwendeten Plattformen, von Linux via macOS bis hin zu Windows. Funktionell hält es nicht mit ZOC mit. Xpipe arbeitet mit Tabby zusammen und kann dieses als Standard-Shell samt dessen Tiling-Funktionen aufrufen.
Bild 4: Tabby lässt sich einfach konfigurieren und verwaltet verschiedene Verbindungsprofile. Auf dem Mac im Bild hat Tabby mehrere Tabs mit ZSH, PowerShell und Bash geöffnet.
Fazit
Wer die meiste Zeit in der Shell damit verbringt, die Konfigurationsdateien von VMs im lokalen LAN oder der Cloud zu editieren, lernt das SSH-Plug-in des Vscode-Editors sehr zu schätzen und braucht daneben eigentlich kein anderes Terminal-Tool mehr. Anwender, die hingegen mit den regulären Funktionen der üblich verdächtigen Terminals zufrieden sind, erhalten mit Tabby etwas extra Komfort, übersichtliche Tiling-Funktionen und ein Tool, das sich auf allen drei Clientsystemen von Linux via macOS bis hin zu Windows fast identisch konfigurieren und bedienen lässt – mal abgesehen von den Mac-üblichen Hot-Keys, die vom PC immer abweichen.
Xpipe sieht sich als universelles Broker-Tool, das Terminals steuert und darüber hinaus einen Dateimanager integriert. Die Zielgruppe sind alle, die eine große Zahl von entfernten Systemen verwalten müssen. Die Entwickler sind auf dem richtigen Weg, doch zum aktuellen Zeitpunkt wirkt das Tool noch etwas unrund. ZOC ist der Altmeister der Terminalkommunikation und offeriert die meisten Protokolle. ZOC eignet sich bevorzugt für die Steuerung von Systemen mit proprietären Shells. Hier leistet die integrierte Rexx-Skriptfunktion gute Dienste.
(dr)
Link-Codes
[1] Zap o Com (ZOC): https://www.emtec.com/
[3] Visual Studio Code: https://code.visualstudio.com/