
Client SSH potenziato con TUI — gestisci connessioni, chiavi e sessioni
<h1 align="center">ESSH</h1>
<p align="center">
<strong>Uno spazio di lavoro SSH con sessioni persistenti e dashboard di stato in tempo reale.</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>
Mantieni le shell remote attive anche quando la connessione cade, passa da un host
all'altro con i tasti o il mouse e controlla lo stato del sistema senza uscire dal
terminale. ESSH usa OpenSSH per le connessioni e tmux per mantenere vivo il tuo lavoro.
## Guardalo in azione
[](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)
**[Guarda la demo di 42 secondi](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)** ·
[Scarica la replica per il browser](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-replay.html)
Ispeziona i dischi con `df` e `lsblk`, trova i processi più attivi con `ps`,
campiona l'attività del sistema con `vmstat` e controlla socket e interfacce con
`ss` e `ip`. La demo mostra il cambio di tema del terminale, le viste di stato
laterale, dimezzata e completa, il passaggio tra sessioni, la guida e il
ripristino della stessa shell remota dopo una caduta di connessione.
## Installazione
Scarica un binario per **Linux o macOS**, su **x86_64 o ARM64**, dalla pagina
[Releases](https://github.com/matthart1983/essh/releases/latest). Estrai l'archivio
e metti `essh` in una directory del tuo `PATH`.
Ti servono **tmux 3.3+ e OpenSSH in locale**, e **tmux su ogni host remoto**.
Le metriche di stato dettagliate sono disponibili per gli host Linux.
Oppure compila dai sorgenti con Rust:
```sh
git clone https://github.com/matthart1983/essh.git
cd essh
cargo build --release
./target/release/essh
```
## Connettersi a un host
ESSH legge gli host da `~/.ssh/config`, dalla propria configurazione e dalla
propria cache degli host. Ad esempio:
```sshconfig
Host web-01
HostName 192.168.1.20
User deploy
IdentityFile ~/.ssh/id_ed25519
```
Esegui `essh`, seleziona un host e premi **Invio**. Usa **/** per filtrare gli
host e **Esc** per cancellare il filtro. Premi **a** per aggiungere un host o
**e** per modificarne uno. OpenSSH gestisce l'autenticazione e la verifica delle
chiavi host.
## Orientarsi nell'interfaccia
| Tasto | Azione |
| --- | --- |
| **F1** | Apre o chiude la guida |
| **F2** | Cicla terminale → stato laterale → stato dimezzato → stato completo → terminale |
| **F3** | Apre Sessions; seleziona una sessione o premi **n** per avviarne un'altra |
| **F4** | Torna al menu principale mentre le sessioni continuano a funzionare |
| **F5 / F6** | Passa alla sessione precedente / successiva |
| **h** su Hosts | Apre lo stato dell'host selezionato |
| **r** dopo una caduta di connessione | Riconnette |
| **q** su Hosts | Esce da ESSH mentre il lavoro remoto continua |
Clicca sulle schede delle sessioni e sui controlli di navigazione per cambiare
vista. Clicca su una riga per selezionarla; fai doppio clic per connetterti o
cambiare. Usa la rotellina del mouse per scorrere, clicca sui pannelli per
portarli in primo piano e trascina i separatori per ridimensionarli.
Se la tua tastiera usa la riga dei tasti funzione per luminosità o volume, tieni
premuto **Fn** mentre premi un tasto F, oppure abilita i tasti funzione standard
nelle impostazioni della tastiera. Anche i controlli di navigazione sono
cliccabili e **F1** elenca i tasti disponibili.
## La tua shell e il tema
Le sessioni remote avviano la shell di login configurata per l'account remoto e
ne caricano i normali file di avvio—zsh, bash, fish o qualunque shell usi
quell'account. Il prompt, gli alias e le associazioni di tasti della shell
provengono da quell'account remoto. Le shell esistenti mantengono il loro stato
quando ti riconnetti.
Per impostazione predefinita ESSH usa i colori del tuo terminale. Scegli un tema
per cambiare il colore di primo piano e di sfondo della shell insieme alla
dashboard:
```sh
essh --theme terminal
essh --theme netwatch
essh --theme light
```
Premi **t** nei menu o nelle viste di stato, oppure **Ctrl+A**, poi **t** da una
shell, per aprire il selettore dei temi. I tasti freccia mostrano l'anteprima di
ogni palette; **Invio** o un clic applica e salva. **Esc** annulla senza
modificare la tua preferenza.
Scegli tra **Terminal**, **Netwatch**, **Light**, **Solarized**, **Dracula**,
**Nord**, **Ocean** o **Sky**. Netwatch usa uno sfondo color carbone con
intestazioni ciano e indicatori verdi. Il tema selezionato si applica a menu,
viste di stato, barre di navigazione e pannelli del terminale. Scegli
**Terminal** per ripristinare i colori nativi del tuo terminale. I programmi e i
prompt possono comunque impostare i propri colori.
Per salvare una preferenza, imposta `theme = "terminal"` (o un altro nome di
tema) in cima a `~/.essh/config.toml`. Applicala a uno spazio di lavoro aperto
con `essh tmux refresh`; le sessioni SSH continuano a funzionare. Il tuo
emulatore di terminale controlla il font e la dimensione del font.
## Scegli la tua vista di stato
Premi **F2** per ciclare tra:
| Vista | Cosa vedi |
| --- | --- |
| Terminale | La tua shell con le barre delle sessioni e di navigazione |
| Stato laterale | Una striscia stretta con traffico, CPU, memoria, disco e latenza |
| Stato dimezzato | La tua shell e una dashboard che condividono il terminale |
| Stato completo | Traffico di rete, core della CPU, memoria, storage, peer e processi |
Le dashboard usano indicatori sottili e letture in tempo reale. Le letture non
disponibili mostrano **—**; gli host disconnessi sono chiaramente contrassegnati.
I terminali stretti saltano i layout laterali.
Nella dashboard:
- **Tab** seleziona un pannello; le **frecce** e la **rotellina del mouse** scorrono.
- **i** seleziona un'interfaccia di rete; **c / m** ordina i processi per CPU o memoria.
- **Sinistra / Destra** naviga tra gli host, inclusi quelli senza una sessione connessa.
- **Esc** chiude lo stato completo e ripristina la vista laterale precedente.
- **F2** dallo stato completo torna al terminale con lo stato laterale disattivato.
Per un accesso diretto, premi **Ctrl+A**, rilascialo, poi **h** per lo stato
completo o **m** per ciclare stato laterale → stato dimezzato → disattivato.
## Lavorare tra sessioni e pannelli
Usa **F3**, poi **n**, per aprire un'altra sessione indipendente. Cambia con
**F5 / F6**, il selettore Sessions o il mouse. **F4** torna all'elenco degli host
senza terminare le tue sessioni.
Gli ID delle sessioni sopravvivono ai riavvii locali. Riconnettersi riaggancia
la shell remota quando esiste ancora; se è terminata, ESSH avvia una nuova shell.
Lo stato remoto di una sessione disconnessa rimane non verificato finché non ti
riconnetti.
**Ctrl+A** controlla tmux locale. **Ctrl+B** controlla tmux sull'host remoto.
Premi il prefisso, rilascialo, poi premi il tasto successivo:
| Tasti | Azione |
| --- | --- |
| **Ctrl+B**, poi **%** | Divide il terminale remoto affiancato |
| **Ctrl+B**, poi **"** | Divide il terminale remoto sopra e sotto |
| **Ctrl+B**, poi una **freccia** | Si sposta tra i pannelli remoti |
| **Ctrl+A**, poi **v** | Invia il tasto successivo direttamente all'applicazione remota |
| **Ctrl+A**, poi **x** | Termina una sessione remota dopo conferma |
F1–F6 sono riservati a ESSH. Usa **Ctrl+A**, poi **v**, quando un'applicazione
remota ha bisogno di uno di quei tasti.
## Sviluppo
```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
```
Il controllo di regressione dal vivo usa un server SSH isolato e socket tmux.
[Demo recording and verification](https://github.com/matthart1983/essh/blob/main/docs/demo-v3.md) spiega come riprodurre il tour.
Per contribuire, crea un branch, apporta la tua modifica, esegui i controlli e
apri una pull request.
## Licenza
[MIT](https://github.com/matthart1983/essh/blob/main/LICENSE)