
Cliente SSH mejorado con TUI — gestiona conexiones, claves y sesiones
███████╗███████╗███████╗██╗ ██╗
██╔════╝██╔════╝██╔════╝██║ ██║
█████╗ ███████╗███████╗███████║
██╔══╝ ╚════██║╚════██║██╔══██║
███████╗███████║███████║██║ ██║
╚══════╝╚══════╝╚══════╝╚═╝ ╚═╝
SSH mejorado para gente con flotas
Un cliente SSH en Rust puro con una TUI densa estilo Netwatch. Múltiples sesiones, métricas de host en vivo y divergencia en toda la flota — sin salir de la terminal.

cargo install essh
O descarga un binario para macOS o Linux, arm64 o x86_64, desde Releases.
Desde el código fuente:
git clone https://github.com/matthart1983/essh && cd essh
cargo build --release # ./target/release/essh
essh # lanzador: escribe para buscar, Enter para conectar
essh connect deploy@web-01 # directo a un host
essh workspace open prod # restaura un conjunto guardado de sesiones
essh run web -- uptime # lanza un comando en un grupo etiquetado
Los hosts provienen de ~/.ssh/config — incluyendo IdentityFile, ProxyJump y
Match — así que no hay nada que importar antes de empezar.
Todo lo común es una sola pulsación. El shell conserva cada combinación de
Ctrl, así que Ctrl+D sigue significando EOF y Ctrl+C sigue interrumpiendo.
F1 ayuda | F2 monitor | F3 archivos | F4 reenvíos de puerto |
F5 mini monitor | F6 desacoplar | F7/F8 sesión anterior/siguiente | F9 nueva sesión |
F10 menú de comandos |
En macOS, esa fila es brillo y volumen de serie — F10 silencia.
O mantén fn con ellas, o activa una vez System Settings → Keyboard → Use F1, F2,
etc. as standard function keys. La ruta de prefijo de abajo no necesita ninguna de las dos y
funciona en todas partes.
Para cualquier otra cosa, pulsa Ctrl+A, suelta, y luego la tecla — s dividir, w cerrar,
t tema, 1–9 saltar a sesión, [/] redimensionar. La franja en la parte inferior
de una sesión lista las teclas que aplican en ese momento, así que no hay nada que
memorizar. Cambia el prefijo con prefix_key bajo [session].
Las combinaciones Option/Alt funcionan en el panel y en las otras pantallas, pero
no mientras un shell tiene el foco — ahí essh reclama exactamente una tecla, el prefijo,
y reenvía todo lo demás, así que Alt+f sigue siendo forward-word de readline y
Alt+. sigue siendo yank-last-argument. En una sesión son las teclas de función o el
prefijo.
| Múltiples sesiones | Pestañas y divisiones en una ventana, con scrollback y reconexión por sesión. |
| Monitor de host en vivo | CPU, memoria, disco, red y procesos principales, muestreados en segundo plano para que la vista esté lista cuando la abras. Sin agente — canales SSH exec simples. |
| Divergencia | Compara cada host contra su conjunto de pares y te dice qué host difiere, en qué faceta, y por qué. |
| Transferencia de archivos | Explorador local/remoto de dos paneles sobre SFTP. |
| Reenvío de puertos | Añade, inspecciona y elimina reenvíos sin soltar la sesión. |
| Auditoría y reproducción | Registro de auditoría JSON estructurado; las sesiones se graban en asciicast para su reproducción. |
Cuarenta servidores web, treinta y nueve bien, y uno con un kernel diferente o un
nginx.conf editado a mano. Una columna de puntos verdes estructuralmente no puede
mostrarte eso.
ESSH agrupa hosts en conjuntos de pares por etiqueta, recopila los mismos datos de cada uno, y puntúa cada host contra el consenso del grupo:
100.0% de 16 comprobaciones de facetas coinciden
0 facetas divergen en 0 hosts.
2 hosts nunca han sido sondeados, así que sus facetas son desconocidas en lugar de en acuerdo.
La pantalla Fleet nombra el valor atípico y las facetas detrás de la afirmación, así que el veredicto es comprobable en lugar de afirmado. Los datos que no puede recopilar se reportan como no recopilados — nunca como acuerdo.
Ocho, que se recorren con t (y Alt+t dentro de una sesión, donde t pertenece al
shell), persistidos en la configuración:
dark (predeterminado) · terminal · light · solarized · dracula · nord · ocean · sky
terminal no fija colores propios — cada ranura se resuelve a una entrada ANSI y
el primer plano y el fondo usan los de tu terminal, así que pywal, matugen o un
perfil de terminal se aplican directamente. sky y light pintan su propio
fondo; ocean usa el de tu terminal con una paleta fija encima.
O salta directamente a uno desde el menú de comandos — F10, o Ctrl+P fuera de una
sesión — y escribe su nombre.
essh --theme terminal # también acepta: system, ansi
essh --theme dracula hosts list
La bandera aplica para una sola ejecución y no se escribe de vuelta, así que es una forma
de probar uno sin comprometerse. t en la TUI lo cambia y lo guarda.
El estado vive en ~/.essh/: config.toml, cache.db, audit.log,
sessions/, recordings/, known_cas/.
essh config init # escribe una configuración predeterminada
essh config edit # ábrela en $EDITOR
essh config resolve web-01 # muestra cómo ssh_config resuelve un host
Las claves de host se verifican y cachean, con una política TOFU configurable
(strict, prompt, auto). Los cifrados y algoritmos KEX se pueden restringir.
Referencia completa de configuración y arquitectura: 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> # diagnósticos para una sesión pasada
essh why <host> # explica por qué un host no conectará
essh audit tail --lines 20
essh bench # números de rendimiento publicados
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo fmt --check
CI ejecuta los tres en cada push.
tests/tui_harness.rs maneja el binario real en un PTY y verifica una pantalla
de terminal parseada con un plazo, porque los fallos que importan en una TUI son
la ausencia de un frame en lugar de uno incorrecto. Las pruebas que necesitan SSH
se omiten a sí mismas cuando no hay ningún host alcanzable.
Haz fork, crea una rama, haz el cambio, ejecuta las tres comprobaciones de arriba, abre un PR.
MIT. Ver LICENSE.