essh v0.3.2
███████╗███████╗███████╗██╗ ██╗ ██╔════╝██╔════╝█ 2026-8-22 08:38:9 Author: kitploit.com(查看原文) 阅读量:10 收藏

                         ███████╗███████╗███████╗██╗  ██╗
                         ██╔════╝██╔════╝██╔════╝██║  ██║
                         █████╗  ███████╗███████╗███████║
                         ██╔══╝  ╚════██║╚════██║██╔══██║
                         ███████╗███████║███████║██║  ██║
                         ╚══════╝╚══════╝╚══════╝╚═╝  ╚═╝
                           Enhanced SSH for people with fleets

crates.io CI License: MIT macOS Linux

A pure-Rust SSH client with a dense, Netwatch-style TUI. Multiple sessions, live host metrics, and fleet-wide divergence — without leaving the terminal.

ESSH Demo

Install

Or grab a binary for macOS or Linux, arm64 or x86_64, from Releases.

From source:

git clone https://github.com/matthart1983/essh && cd essh
cargo build --release        # ./target/release/essh

Start

essh                          # launcher: type to search, Enter to connect
essh connect deploy@web-01    # straight to a host
essh workspace open prod      # restore a saved set of sessions
essh run web -- uptime        # fan a command across a tagged group

Hosts come from ~/.ssh/config — including IdentityFile, ProxyJump and Match — so there is nothing to import before you start.

Keys

Everything common is one keypress. The shell keeps every Ctrl combination, so Ctrl+D still means EOF and Ctrl+C still interrupts.

F1 helpF2 monitorF3 filesF4 port forwards
F5 mini monitorF6 detachF7/F8 prev/next sessionF9 new session
F10 command menu

For anything else, press Ctrl+A, let go, then the key — s split, w close, t theme, 19 jump to session, [/] resize. The strip along the bottom of a session lists the keys that apply right now, so there is nothing to memorise. Change the prefix with prefix_key under [session].

Option/Alt combinations also work when your terminal sends them as Meta, but function keys need no configuration and behave the same on both platforms.

What it does

Multiple sessionsTabs and splits in one window, with per-session scrollback and reconnect.
Live host monitorCPU, memory, disk, network and top processes, sampled in the background so the view is warm when you open it. No agent — plain SSH exec channels.
DivergenceCompares each host against its peer set and tells you which host differs, on which facet, and why.
File transferTwo-pane local/remote browser over SFTP.
Port forwardingAdd, inspect and remove forwards without dropping the session.
Audit and replayStructured JSON audit log; sessions record to asciicast for replay.

Divergence

Forty web servers, thirty-nine fine, and one with a different kernel or a hand-edited nginx.conf. A column of green dots structurally cannot show you that.

ESSH groups hosts into peer sets by tag, collects the same facts from each, and scores every host against the group's consensus:

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.

The Fleet screen names the outlier and the facets behind the claim, so the verdict is checkable rather than asserted. Facts it cannot collect are reported as uncollected — never as agreement.

Configuration

State lives in ~/.essh/: config.toml, cache.db, audit.log, sessions/, recordings/, known_cas/.

essh config init      # write a default config
essh config edit      # open it in $EDITOR
essh config resolve web-01   # show how ssh_config resolves a host

Host keys are verified and cached, with a configurable TOFU policy (strict, prompt, auto). Ciphers and KEX algorithms can be restricted.

Full configuration and architecture reference: SPEC.md.

CLI

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 for a past session
essh why <host>               # explain why a host will not connect
essh audit tail --lines 20
essh bench                    # published performance numbers

Development

cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --check

CI runs all three on every push.

tests/tui_harness.rs drives the real binary on a PTY and asserts on a parsed terminal screen with a deadline, because the failures that matter in a TUI are the absence of a frame rather than a wrong one. The tests that need SSH skip themselves when no host is reachable.

Contributing

Fork, branch, make the change, run the three checks above, open a PR.

License

MIT. See LICENSE.


文章来源: https://kitploit.com/en/posts/github-matthart1983-essh-v032
如有侵权请联系:admin#unsafe.sh