
Client SSH amélioré avec TUI — gérer les connexions, les clés et les sessions
███████╗███████╗███████╗██╗ ██╗
██╔════╝██╔════╝██╔════╝██║ ██║
█████╗ ███████╗███████╗███████║
██╔══╝ ╚════██║╚════██║██╔══██║
███████╗███████║███████║██║ ██║
╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
SSH amélioré pour ceux qui gèrent des flottes
Un client SSH 100 % Rust avec une IUT dense de style Netwatch. Sessions multiples, métriques hôtes en direct et divergence à l'échelle de la flotte — sans quitter le terminal.

cargo install essh
Ou récupérez un binaire pour macOS ou Linux, arm64 ou x86_64, depuis Releases.
Depuis les sources :
git clone https://github.com/matthart1983/essh && cd essh
cargo build --release # ./target/release/essh
essh # lanceur : tapez pour rechercher, Entrée pour se connecter
essh connect deploy@web-01 # directement vers un hôte
essh workspace open prod # restaure un ensemble de sessions sauvegardées
essh run web -- uptime # diffuse une commande sur un groupe tagué
Les hôtes proviennent de ~/.ssh/config — y compris IdentityFile, ProxyJump et
Match — donc rien à importer avant de commencer.
Tout ce qui est courant se fait en une pression de touche. Le shell conserve toutes les combinaisons
Ctrl, donc Ctrl+D signifie toujours EOF et Ctrl+C interrompt toujours.
F1 aide | F2 moniteur | F3 fichiers | F4 redirections de port |
F5 mini moniteur | F6 détacher | F7/F8 session préc./suiv. | F9 nouvelle session |
F10 menu de commandes |
Sur macOS, cette rangée correspond par défaut à la luminosité et au volume — F10 coupe le son.
Soit maintenez fn avec ces touches, soit activez une fois Réglages Système → Clavier → Utiliser F1, F2,
etc. comme touches de fonction standard. La voie du préfixe ci-dessous n'en a besoin d'aucune et
fonctionne partout.
Pour tout le reste, appuyez sur Ctrl+A, relâchez, puis la touche — s diviser, w fermer,
t thème, 1–9 sauter vers une session, [/] redimensionner. La bande en bas
d'une session liste les touches applicables à l'instant, donc rien à mémoriser.
Changez le préfixe avec prefix_key sous [session].
Les combinaisons Option/Alt fonctionnent sur le tableau de bord et les autres écrans, mais
pas quand un shell a le focus — là, essh revendique exactement une touche, le préfixe,
et transmet tout le reste, donc Alt+f reste le forward-word de readline et
Alt+. reste yank-last-argument. Dans une session, ce sont les touches de fonction ou le
préfixe.
| Sessions multiples | Onglets et divisions dans une seule fenêtre, avec défilement arrière et reconnexion par session. |
| Moniteur hôte en direct | CPU, mémoire, disque, réseau et principaux processus, échantillonnés en arrière-plan pour que la vue soit chaude à l'ouverture. Aucun agent — de simples canaux d'exécution SSH. |
| Divergence | Compare chaque hôte à son ensemble de pairs et vous dit quel hôte diffère, sur quelle facette, et pourquoi. |
| Transfert de fichiers | Navigateur local/distant à deux volets via SFTP. |
| Redirection de port | Ajoutez, inspectez et supprimez des redirections sans abandonner la session. |
| Audit et relecture | Journal d'audit JSON structuré ; les sessions s'enregistrent en asciicast pour relecture. |
Quarante serveurs web, trente-neuf en ordre, et un avec un noyau différent ou un
nginx.conf modifié à la main. Une colonne de points verts ne peut structurellement pas vous
montrer cela.
ESSH regroupe les hôtes en ensembles de pairs par tag, collecte les mêmes faits auprès de chacun, et score chaque hôte par rapport au consensus du groupe :
100.0% of 16 facet-checks agree
0 facets diverge across 0 hosts.
2 hosts have never been probed, so their facets are unknown rather than in agreement.
L'écran Fleet nomme la valeur aberrante et les facettes derrière l'affirmation, donc le verdict est vérifiable plutôt qu'affirmé. Les faits qu'il ne peut pas collecter sont signalés comme non collectés — jamais comme un accord.
Huit, parcourus avec t (et Alt+t dans une session, où t appartient au
shell), persistés dans la configuration :
dark (défaut) · terminal · light · solarized · dracula · nord · ocean · sky
terminal ne fixe aucune couleur propre — chaque emplacement se résout en une entrée ANSI et
le premier plan et l'arrière-plan utilisent ceux de votre terminal, donc pywal, matugen ou un
profil de terminal passe directement. sky et light peignent leur propre
fond ; ocean utilise celui de votre terminal avec une palette fixe par-dessus.
Ou accédez directement à l'un d'eux depuis le menu de commandes — F10, ou Ctrl+P hors
session — et tapez son nom.
essh --theme terminal # accepte aussi : system, ansi
essh --theme dracula hosts list
Le drapeau s'applique pour une seule exécution et n'est pas réécrit, c'est donc un moyen d'en essayer un
sans s'engager. t dans l'IUT le change et l'enregistre.
L'état vit dans ~/.essh/ : config.toml, cache.db, audit.log,
sessions/, recordings/, known_cas/.
essh config init # écrit une configuration par défaut
essh config edit # l'ouvre dans $EDITOR
essh config resolve web-01 # montre comment ssh_config résout un hôte
Les clés d'hôte sont vérifiées et mises en cache, avec une politique TOFU configurable
(strict, prompt, auto). Les chiffrements et algorithmes KEX peuvent être restreints.
Référence complète de configuration et d'architecture : SPEC.md.
essh hosts list | add | remove | import | health
essh keys list | add | remove
essh workspace list | open | save | show | remove
essh session list | replay <id>
essh diag <session-id> # diagnostics pour une session passée
essh why <host> # explique pourquoi un hôte ne se connectera pas
essh audit tail --lines 20
essh bench # chiffres de performance publiés
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --check
CI exécute les trois à chaque push.
tests/tui_harness.rs pilote le vrai binaire sur un PTY et vérifie un écran de terminal
analysé avec une échéance, car les échecs qui comptent dans une IUT sont
l'absence d'une frame plutôt qu'une frame erronée. Les tests qui nécessitent SSH se
sautent eux-mêmes quand aucun hôte n'est joignable.
Forkez, créez une branche, faites le changement, exécutez les trois vérifications ci-dessus, ouvrez une PR.
MIT. Voir LICENSE.