
Client SSH amélioré avec TUI — gérer les connexions, les clés et les sessions
<h1 align="center">ESSH</h1>
<p align="center">
<strong>Un espace de travail SSH avec des sessions persistantes et des tableaux de bord de santé en direct.</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>
Gardez vos shells distants actifs malgré les coupures de connexion, basculez entre les hôtes avec
le clavier ou la souris, et consultez l'état de santé du système sans quitter votre terminal.
ESSH utilise OpenSSH pour les connexions et tmux pour maintenir votre travail en vie.
## Voir en action
[](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)
**[Regarder la démo de 42 secondes](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)** ·
[Télécharger la rediffusion navigateur](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-replay.html)
Inspectez les disques avec `df` et `lsblk`, trouvez les processus actifs avec `ps`, échantillonnez l'activité
du système avec `vmstat`, et vérifiez les sockets et interfaces avec `ss` et `ip`.
La démo montre le changement de thème du terminal, les vues de santé latérale, mi-écran et pleine,
le changement de session, l'aide,
et une connexion interrompue qui récupère le même shell distant.
## Installation
Téléchargez un binaire pour **Linux ou macOS**, sur **x86_64 ou ARM64**, depuis
[Releases](https://github.com/matthart1983/essh/releases/latest). Extrayez l'archive
et placez `essh` quelque part dans votre `PATH`.
Vous avez besoin de **tmux 3.3+ et OpenSSH en local**, et de **tmux sur chaque hôte distant**.
Des métriques de santé détaillées sont disponibles pour les hôtes Linux.
Ou compilez depuis les sources avec Rust :
```sh
git clone https://github.com/matthart1983/essh.git
cd essh
cargo build --release
./target/release/essh
```
## Se connecter à un hôte
ESSH lit les hôtes depuis `~/.ssh/config`, sa propre configuration et son cache d'hôtes.
Par exemple :
```sshconfig
Host web-01
HostName 192.168.1.20
User deploy
IdentityFile ~/.ssh/id_ed25519
```
Lancez `essh`, sélectionnez un hôte et appuyez sur **Entrée**. Utilisez **/** pour filtrer les hôtes et
**Échap** pour effacer le filtre. Appuyez sur **a** pour ajouter un hôte ou **e** pour en modifier un.
OpenSSH gère l'authentification et la vérification des clés d'hôte.
## S'orienter
| Touche | Action |
| --- | --- |
| **F1** | Ouvrir ou fermer l'aide |
| **F2** | Faire défiler terminal → santé latérale → santé mi-écran → santé pleine → terminal |
| **F3** | Ouvrir Sessions ; sélectionnez une session ou appuyez sur **n** pour en démarrer une autre |
| **F4** | Revenir au menu principal pendant que les sessions continuent de tourner |
| **F5 / F6** | Passer à la session précédente / suivante |
| **h** sur Hôtes | Ouvrir la santé de l'hôte sélectionné |
| **r** après une coupure de connexion | Reconnecter |
| **q** sur Hôtes | Quitter ESSH pendant que le travail distant continue |
Cliquez sur les onglets de session et les contrôles de navigation pour changer de vue. Cliquez sur une ligne pour la sélectionner ;
double-cliquez pour vous connecter ou basculer. Utilisez la molette de la souris pour faire défiler, cliquez sur les panneaux
pour les focaliser, et faites glisser les séparateurs pour les redimensionner.
Si votre clavier utilise la rangée de fonctions pour la luminosité ou le volume, maintenez **Fn**
en appuyant sur une touche F, ou activez les touches de fonction standard dans les paramètres de votre clavier.
Les contrôles de navigation sont également cliquables, et **F1** liste les touches disponibles.
## Votre shell et votre thème
Les sessions distantes démarrent le shell de connexion configuré du compte distant et chargent ses
fichiers de démarrage habituels—zsh, bash, fish, ou le shell utilisé par ce compte.
Votre invite, vos alias et vos raccourcis clavier de shell proviennent de ce compte distant.
Les shells existants conservent leur état d'exécution lorsque vous vous reconnectez.
ESSH utilise par défaut les couleurs de votre terminal. Choisissez un thème pour modifier le premier plan et l'arrière-plan du shell
ainsi que le tableau de bord :
```sh
essh --theme terminal
essh --theme netwatch
essh --theme light
```
Appuyez sur **t** dans les menus ou les vues de santé, ou **Ctrl+A**, puis **t** depuis un shell,
pour ouvrir le sélecteur de thème. Les flèches prévisualisent chaque palette ; **Entrée** ou un clic
applique et enregistre. **Échap** annule sans modifier votre préférence.
Choisissez **Terminal**, **Netwatch**, **Light**, **Solarized**, **Dracula**,
**Nord**, **Ocean** ou **Sky**. Netwatch utilise un fond anthracite avec des titres cyan
et des jauges vertes. Le thème sélectionné s'applique aux menus, aux vues de santé,
aux barres de navigation et aux panneaux de terminal. Choisissez **Terminal** pour restaurer les
couleurs natives de votre terminal. Les programmes et les invites peuvent toujours définir leurs propres couleurs.
Pour enregistrer une préférence, définissez `theme = "terminal"` (ou un autre nom de thème) en haut
de `~/.essh/config.toml`. Appliquez-la à un espace de travail ouvert avec
`essh tmux refresh` ; les sessions SSH continuent de tourner. Votre émulateur de terminal contrôle
la police et la taille de police.
## Choisir votre vue de santé
Appuyez sur **F2** pour faire défiler :
| Vue | Ce que vous voyez |
| --- | --- |
| Terminal | Votre shell avec les barres de session et de navigation |
| Santé latérale | Une bande étroite avec trafic, CPU, mémoire, disque et latence |
| Santé mi-écran | Votre shell et un tableau de bord partageant le terminal |
| Santé pleine | Trafic réseau, cœurs CPU, mémoire, stockage, pairs et processus |
Les tableaux de bord utilisent des jauges fines et des relevés en direct. Les relevés indisponibles affichent **—** ;
les hôtes déconnectés sont clairement indiqués. Les terminaux étroits omettent les dispositions latérales.
Dans le tableau de bord :
- **Tab** sélectionne un panneau ; les **flèches** et la **molette de la souris** font défiler.
- **i** sélectionne une interface réseau ; **c / m** trie les processus par CPU ou mémoire.
- **Gauche / Droite** parcourt les hôtes, y compris ceux sans session connectée.
- **Échap** ferme la santé pleine et restaure la vue latérale précédente.
- **F2** depuis la santé pleine revient au terminal avec la santé latérale désactivée.
Pour un accès direct, appuyez sur **Ctrl+A**, relâchez-le, puis **h** pour la santé pleine ou
**m** pour faire défiler santé latérale → santé mi-écran → désactivé.
## Travailler entre sessions et panneaux
Utilisez **F3**, puis **n**, pour ouvrir une autre session indépendante. Basculez avec
**F5 / F6**, le sélecteur Sessions, ou la souris. **F4** revient à la liste des hôtes
sans terminer vos sessions.
Les identifiants de session survivent aux redémarrages locaux. La reconnexion rattache le shell distant
lorsqu'il existe encore ; s'il s'est terminé, ESSH démarre un nouveau shell. L'état distant d'une session
déconnectée reste non vérifié jusqu'à ce que vous vous reconnectiez.
**Ctrl+A** contrôle tmux local. **Ctrl+B** contrôle tmux sur l'hôte distant.
Appuyez sur le préfixe, relâchez-le, puis appuyez sur la touche suivante :
| Touches | Action |
| --- | --- |
| **Ctrl+B**, puis **%** | Diviser le terminal distant côte à côte |
| **Ctrl+B**, puis **"** | Diviser le terminal distant en haut et en bas |
| **Ctrl+B**, puis une **flèche** | Se déplacer entre les panneaux distants |
| **Ctrl+A**, puis **v** | Envoyer la touche suivante directement à l'application distante |
| **Ctrl+A**, puis **x** | Terminer une session distante après confirmation |
F1–F6 sont réservées à ESSH. Utilisez **Ctrl+A**, puis **v**, lorsqu'une application distante
a besoin de l'une de ces touches.
## Développement
```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
```
Le test de régression en direct utilise un serveur SSH isolé et des sockets tmux.
[Demo recording and verification](https://github.com/matthart1983/essh/blob/main/docs/demo-v3.md) explique comment reproduire la visite.
Pour contribuer, créez une branche, effectuez votre modification, lancez les vérifications et ouvrez une pull request.
## Licence
[MIT](https://github.com/matthart1983/essh/blob/main/LICENSE)