
Расширенный SSH-клиент с TUI — управление подключениями, ключами и сессиями
███████╗███████╗███████╗██╗ ██╗
██╔════╝██╔════╝██╔════╝██║ ██║
█████╗ ███████╗███████╗███████║
██╔══╝ ╚════██║╚════██║██╔══██║
███████╗███████║███████║██║ ██║
╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
Enhanced SSH for people with fleets
Чистый Rust SSH-клиент с плотным 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 # лаунчер: вводите для поиска, Enter для подключения
essh connect deploy@web-01 # сразу к хосту
essh workspace open prod # восстановить сохранённый набор сессий
essh run web -- uptime # разослать команду по группе с тегом
Хосты берутся из ~/.ssh/config — включая IdentityFile, ProxyJump и
Match — так что импортировать ничего не нужно перед началом работы.
Всё часто используемое — одним нажатием. Шелл сохраняет все комбинации с
Ctrl, так что Ctrl+D по-прежнему означает EOF, а Ctrl+C — прерывание.
F1 справка | F2 монитор | F3 файлы | F4 проброс портов |
F5 мини-монитор | F6 отсоединить | F7/F8 пред./след. сессия | F9 новая сессия |
F10 меню команд |
На macOS этот ряд по умолчанию отвечает за яркость и громкость — F10 глушит звук.
Либо удерживайте fn вместе с ними, либо один раз включите System Settings → Keyboard → Use F1, F2,
etc. as standard function keys. Маршрут через префикс ниже не требует ни того, ни другого
и работает везде.
Для всего остального нажмите Ctrl+A, отпустите, затем нужную клавишу — s разделить, w закрыть,
t тема, 1–9 перейти к сессии, [/] изменить размер. Полоса внизу
сессии перечисляет клавиши, актуальные в данный момент, так что запоминать
нечего. Смените префикс через prefix_key в секции [session].
Комбинации с Option/Alt работают на дашборде и других экранах, но
не пока шелл в фокусе — там essh забирает ровно одну клавишу, префикс,
и пересылает всё остальное, так что Alt+f остаётся readline-овским forward-word, а
Alt+. — yank-last-argument. В сессии это функциональные клавиши или
префикс.
| Несколько сессий | Вкладки и сплиты в одном окне, с прокруткой и переподключением для каждой сессии. |
| Живой монитор хоста | CPU, память, диск, сеть и топ процессов, собираемые в фоне, чтобы вид был тёплым, когда вы его открываете. Без агента — обычные SSH exec-каналы. |
| Расхождения | Сравнивает каждый хост с его группой и сообщает, какой хост отличается, по какому аспекту и почему. |
| Передача файлов | Двухпанельный браузер локально/удалённо по SFTP. |
| Проброс портов | Добавление, просмотр и удаление пробросов без разрыва сессии. |
| Аудит и воспроизведение | Структурированный JSON-журнал аудита; сессии записываются в asciicast для воспроизведения. |
Сорок веб-серверов, тридцать девять в порядке, и один с другим ядром или
вручную отредактированным 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 называет выброс и аспекты, стоящие за этим утверждением, так что вердикт можно проверить, а не просто принять на веру. Факты, которые собрать не удалось, помечаются как несобранные — никогда как согласованные.
Восемь, переключаются клавишей t (и Alt+t внутри сессии, где t принадлежит
шеллу), сохраняются в конфиг:
dark (по умолчанию) · terminal · light · solarized · dracula · nord · ocean · sky
terminal не закрепляет собственных цветов — каждый слот резолвится в ANSI-запись, а
передний план и фон используют цвета вашего терминала, так что pywal, matugen или
профиль терминала проходят напрямую. sky и light рисуют собственный фон;
ocean использует фон вашего терминала с фиксированной палитрой поверх.
Или перейдите сразу к нужной из меню команд — F10 или Ctrl+P вне
сессии — и введите её имя.
essh --theme terminal # также принимает: system, ansi
essh --theme dracula hosts list
Флаг действует на один запуск и не записывается обратно, так что это способ
попробовать тему без обязательств. t в TUI меняет её и сохраняет.
Состояние хранится в ~/.essh/: config.toml, cache.db, audit.log,
sessions/, recordings/, known_cas/.
essh config init # записать конфиг по умолчанию
essh config edit # открыть его в $EDITOR
essh config resolve web-01 # показать, как ssh_config резолвит хост
Ключи хостов проверяются и кэшируются, с настраиваемой политикой 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> # диагностика для прошлой сессии
essh why <host> # объяснить, почему хост не подключится
essh audit tail --lines 20
essh bench # опубликованные показатели производительности
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --check
CI запускает все три проверки при каждом пуше.
tests/tui_harness.rs запускает реальный бинарник на PTY и проверяет
разобранный экран терминала с дедлайном, потому что в TUI важны сбои
в виде отсутствия кадра, а не неверного кадра. Тесты, которым нужен SSH,
пропускают себя, когда ни один хост недоступен.
Форкните, создайте ветку, внесите изменение, прогоните три проверки выше, откройте PR.
MIT. См. LICENSE.