
Расширенный SSH-клиент с TUI — управление подключениями, ключами и сессиями
███████╗███████╗███████╗██╗ ██╗
██╔════╝██╔════╝██╔════╝██║ ██║
█████╗ ███████╗███████╗███████║
██╔══╝ ╚════██║╚════██║██╔══██║
███████╗███████║███████║██║ ██║
╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
Enhanced SSH for people with fleets
Чистый SSH-клиент на Rust с плотным TUI в стиле Netwatch. Несколько сессий, живые метрики хостов и расхождения по всему парку — не покидая терминала.

cargo install essh
Или скачайте готовый бинарник для macOS или Linux, arm64 или x86_64, со страницы Releases.
Из исходников:
git clone https://github.com/matthart1983/essh && cd essh
cargo build --release # ./target/release/essh
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
Хосты берутся из ~/.ssh/config — включая IdentityFile, ProxyJump и
Match, — так что импортировать перед началом ничего не нужно.
Всё основное — в одно нажатие. Шелл сохраняет все комбинации Ctrl,
так что Ctrl+D по-прежнему означает EOF, а Ctrl+C — прерывание.
Для всего остального нажмите Ctrl+A, отпустите, затем нужную клавишу: s — разделить,
w — закрыть, t — тема, 1–9 — перейти к сессии, [/] — изменить размер.
Полоса внизу сессии показывает клавиши, актуальные в данный момент, так что
запоминать ничего не нужно. Измените префикс с помощью prefix_key в разделе [session].
Комбинации Option/Alt также работают, когда ваш терминал отправляет их как Meta,
но функциональным клавишам не нужна настройка, и они ведут себя одинаково на обеих платформах.
Сорок веб-серверов: тридцать девять в порядке, а у одного другое ядро или
вручную отредактированный nginx.conf. Колонка зелёных точек структурно не может
это показать.
ESSH группирует хосты в группы по тегам, собирает с каждого одни и те же факты и оценивает каждый хост относительно консенсуса группы:
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.
Экран Fleet называет выбивающийся хост и параметры, стоящие за этим выводом, так что заключение можно проверить, а не просто принять на веру. Факты, которые собрать не удалось, помечаются как несобранные — но никогда как совпадающие.
Состояние хранится в ~/.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
Ключи хостов проверяются и кэшируются с настраиваемой политикой TOFU
(strict, prompt, auto). Можно ограничить набор шифров и KEX-алгоритмов.
Полный справочник по конфигурации и архитектуре: 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 for a past session
essh why <host> # explain why a host will not connect
essh audit tail --lines 20
essh bench # published performance numbers
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --check
CI запускает все три проверки при каждом пуше.
tests/tui_harness.rs запускает реальный бинарник на PTY и с дедлайном проверяет
разобранный экран терминала: значимые сбои в TUI — это отсутствие кадра, а не
неверный кадр. Тесты, которым нужен SSH, пропускают себя, если ни один хост
недоступен.
Сделайте форк, создайте ветку, внесите изменения, запустите три описанные выше проверки и откройте PR.
MIT. См. LICENSE.
F1 справка | F2 монитор | F3 файлы | F4 проброс портов |
F5 мини-монитор | F6 отсоединить | F7/F8 пред./след. сессия | F9 новая сессия |
F10 меню команд |
| Несколько сессий | Вкладки и разделение в одном окне с прокруткой и переподключением для каждой сессии. |
| Живой монитор хостов | CPU, память, диск, сеть и топ процессов; собирается в фоне, так что при открытии вид уже актуален. Без агента — обычные SSH exec-каналы. |
| Расхождения | Сравнивает каждый хост с его группой и показывает, какой хост отличается, по какому параметру и почему. |
| Передача файлов | Двухпанельный браузер локальных/удалённых файлов поверх SFTP. |
| Проброс портов | Добавление, просмотр и удаление пробросов без разрыва сессии. |
| Аудит и воспроизведение | Структурированный JSON-журнал аудита; сессии записываются в asciicast для воспроизведения. |