
Erweiterter SSH-Client mit TUI — Verbindungen, Schlüssel und Sitzungen verwalten
<h1 align="center">ESSH</h1>
<p align="center">
<strong>Ein SSH-Arbeitsbereich mit persistenten Sitzungen und Live-Health-Dashboards.</strong>
</p>
<p align="center">
<a href="https://github.com/matthart1983/essh/releases/latest"><img src="https://img.shields.io/github/v/release/matthart1983/essh" alt="Latest release"></a>
<a href="https://github.com/matthart1983/essh/releases"><img src="https://img.shields.io/github/downloads/matthart1983/essh/total" alt="Release downloads"></a>
<a href="https://github.com/matthart1983/essh/actions/workflows/ci.yml"><img src="https://github.com/matthart1983/essh/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI status"></a>
<a href="#install"><img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-blue" alt="Platforms: macOS and Linux"></a>
<a href="https://github.com/matthart1983/essh/releases/latest"><img src="https://img.shields.io/badge/architecture-x86__64%20%7C%20ARM64-blue" alt="Architectures: x86_64 and ARM64"></a>
<a href="https://github.com/matthart1983/essh/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT"></a>
</p>
Halte Remote-Shells über Verbindungsabbrüche hinweg am Laufen, wechsle mit
Tasten oder Maus zwischen Hosts und prüfe die Systemgesundheit, ohne dein Terminal
zu verlassen. ESSH verwendet OpenSSH für Verbindungen und tmux, um deine Arbeit
am Leben zu halten.
## In Aktion erleben
[](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)
**[Sieh dir die 42-sekündige Demo an](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)** ·
[Lade die Browser-Wiedergabe herunter](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-replay.html)
Untersuche Datenträger mit `df` und `lsblk`, finde beschäftigte Prozesse mit `ps`,
messe die Systemaktivität mit `vmstat` und prüfe Sockets und Schnittstellen mit `ss` und `ip`.
Die Demo zeigt Terminal-Theme-Wechsel, Seiten-, Halb- und Voll-Health-Ansichten,
Sitzungswechsel, Hilfe
und eine abgebrochene Verbindung, die dieselbe Remote-Shell wiederherstellt.
## Installation
Lade ein Binary für **Linux oder macOS**, auf **x86_64 oder ARM64**, von
[Releases](https://github.com/matthart1983/essh/releases/latest) herunter. Entpacke das Archiv
und lege `essh` irgendwo in deinen `PATH`.
Du benötigst **tmux 3.3+ und OpenSSH lokal** sowie **tmux auf jedem Remote-Host**.
Detaillierte Health-Metriken sind für Linux-Hosts verfügbar.
Oder baue aus dem Quellcode mit Rust:
```sh
git clone https://github.com/matthart1983/essh.git
cd essh
cargo build --release
./target/release/essh
```
## Mit einem Host verbinden
ESSH liest Hosts aus `~/.ssh/config`, seiner eigenen Konfiguration und seinem Host-Cache.
Zum Beispiel:
```sshconfig
Host web-01
HostName 192.168.1.20
User deploy
IdentityFile ~/.ssh/id_ed25519
```
Führe `essh` aus, wähle einen Host und drücke **Enter**. Verwende **/**, um Hosts zu filtern, und
**Esc**, um den Filter zu löschen. Drücke **a**, um einen Host hinzuzufügen, oder **e**, um einen zu bearbeiten.
OpenSSH übernimmt Authentifizierung und Host-Key-Prüfung.
## Zurechtfinden
| Taste | Aktion |
| --- | --- |
| **F1** | Hilfe öffnen oder schließen |
| **F2** | Terminal → Side Health → Half Health → Full Health → Terminal durchschalten |
| **F3** | Sitzungen öffnen; wähle eine Sitzung oder drücke **n**, um eine weitere zu starten |
| **F4** | Zum Hauptmenü zurückkehren, während Sitzungen weiterlaufen |
| **F5 / F6** | Zur vorherigen / nächsten Sitzung wechseln |
| **h** bei Hosts | Health für den ausgewählten Host öffnen |
| **r** nach einem Verbindungsabbruch | Neu verbinden |
| **q** bei Hosts | ESSH verlassen, während Remote-Arbeit weiterläuft |
Klicke auf Sitzungs-Tabs und Navigationssteuerelemente, um Ansichten zu wechseln. Klicke auf eine Zeile, um sie auszuwählen;
Doppelklick zum Verbinden oder Wechseln. Verwende das Mausrad zum Scrollen, klicke auf Panes,
um sie zu fokussieren, und ziehe Trennlinien, um sie zu vergrößern oder zu verkleinern.
Wenn deine Tastatur die Funktionsreihe für Helligkeit oder Lautstärke verwendet, halte **Fn**
gedrückt, während du eine F-Taste drückst, oder aktiviere Standard-Funktionstasten in deinen Tastatureinstellungen.
Die Navigationssteuerelemente sind ebenfalls anklickbar, und **F1** listet die verfügbaren Tasten auf.
## Deine Shell und dein Theme
Remote-Sitzungen starten die konfigurierte Login-Shell des Remote-Kontos und laden dessen
normale Startdateien—zsh, bash, fish oder welche Shell dieses Konto auch verwendet.
Dein Prompt, Aliase und Shell-Tastenbindungen stammen von diesem Remote-Konto.
Bestehende Shells behalten ihren laufenden Zustand, wenn du dich neu verbindest.
ESSH verwendet standardmäßig die Farben deines Terminals. Wähle ein Theme, um Vordergrund und Hintergrund der Shell
zusammen mit dem Dashboard zu ändern:
```sh
essh --theme terminal
essh --theme netwatch
essh --theme light
```
Drücke **t** in Menüs oder Health-Ansichten oder **Ctrl+A**, dann **t** aus einer Shell,
um die Theme-Auswahl zu öffnen. Pfeiltasten zeigen eine Vorschau jeder Palette; **Enter** oder ein Klick
wendet sie an und speichert sie. **Esc** bricht ab, ohne deine Einstellung zu ändern.
Wähle **Terminal**, **Netwatch**, **Light**, **Solarized**, **Dracula**,
**Nord**, **Ocean** oder **Sky**. Netwatch verwendet einen anthrazitfarbenen Hintergrund mit cyanfarbenen
Überschriften und grünen Messanzeigen. Das ausgewählte Theme gilt für Menüs, Health-
Ansichten, Navigationsleisten und Terminal-Panes. Wähle **Terminal**, um die
nativen Farben deines Terminals wiederherzustellen. Programme und Prompts können weiterhin ihre eigenen Farben festlegen.
Um eine Einstellung zu speichern, setze `theme = "terminal"` (oder einen anderen Theme-Namen) am Anfang
von `~/.essh/config.toml`. Wende sie auf einen offenen Arbeitsbereich mit
`essh tmux refresh` an; SSH-Sitzungen laufen weiter. Dein Terminal-Emulator steuert
die Schriftart und Schriftgröße.
## Wähle deine Health-Ansicht
Drücke **F2**, um durchzuschalten:
| Ansicht | Was du siehst |
| --- | --- |
| Terminal | Deine Shell mit den Sitzungs- und Navigationsleisten |
| Side Health | Ein schmaler Streifen mit Traffic, CPU, Speicher, Datenträger und Latenz |
| Half Health | Deine Shell und ein Dashboard, die sich das Terminal teilen |
| Full Health | Netzwerk-Traffic, CPU-Kerne, Speicher, Storage, Peers und Prozesse |
Die Dashboards verwenden dünne Messanzeigen und Live-Werte. Nicht verfügbare Werte zeigen **—**;
getrennte Hosts sind deutlich markiert. Schmale Terminals überspringen die Side-Layouts.
Im Dashboard:
- **Tab** wählt ein Panel aus; **Pfeiltasten** und das **Mausrad** scrollen.
- **i** wählt eine Netzwerkschnittstelle aus; **c / m** sortiert Prozesse nach CPU oder Speicher.
- **Left / Right** durchsucht Hosts, einschließlich Hosts ohne verbundene Sitzung.
- **Esc** schließt Full Health und stellt die vorherige Side-Ansicht wieder her.
- **F2** aus Full Health kehrt zum Terminal mit deaktiviertem Side Health zurück.
Für direkten Zugriff drücke **Ctrl+A**, lass es los, dann **h** für Full Health oder
**m**, um Side Health → Half Health → Aus durchzuschalten.
## Über Sitzungen und Panes hinweg arbeiten
Verwende **F3**, dann **n**, um eine weitere unabhängige Sitzung zu öffnen. Wechsle mit
**F5 / F6**, der Sitzungsauswahl oder der Maus. **F4** kehrt zur Host-Liste zurück,
ohne deine Sitzungen zu beenden.
Sitzungs-IDs überleben lokale Neustarts. Beim Neuverbinden wird die Remote-Shell
wieder angehängt, wenn sie noch existiert; wenn sie beendet wurde, startet ESSH eine neue Shell. Der Remote-Zustand einer getrennten
Sitzung bleibt unbestätigt, bis du dich neu verbindest.
**Ctrl+A** steuert lokales tmux. **Ctrl+B** steuert tmux auf dem Remote-Host.
Drücke das Präfix, lass es los, dann drücke die nächste Taste:
| Tasten | Aktion |
| --- | --- |
| **Ctrl+B**, dann **%** | Das Remote-Terminal nebeneinander aufteilen |
| **Ctrl+B**, dann **"** | Das Remote-Terminal oben und unten aufteilen |
| **Ctrl+B**, dann ein **Pfeil** | Zwischen Remote-Panes wechseln |
| **Ctrl+A**, dann **v** | Die nächste Taste direkt an die Remote-Anwendung senden |
| **Ctrl+A**, dann **x** | Eine Remote-Sitzung nach Bestätigung beenden |
F1–F6 sind für ESSH reserviert. Verwende **Ctrl+A**, dann **v**, wenn eine Remote-Anwendung
eine dieser Tasten benötigt.
## Entwicklung
```sh
cargo fmt --check
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo build --release
ESSH_BIN=target/release/essh python3 scripts/test-tmux-v3.py
```
Der Live-Regressionstest verwendet einen isolierten SSH-Server und tmux-Sockets.
[Demo-Aufzeichnung und Verifikation](https://github.com/matthart1983/essh/blob/main/docs/demo-v3.md) erklärt, wie man die Tour reproduziert.
Um beizutragen, erstelle einen Branch, nimm deine Änderung vor, führe die Prüfungen aus und öffne einen Pull Request.
## Lizenz
[MIT](https://github.com/matthart1983/essh/blob/main/LICENSE)