
Cliente SSH mejorado con TUI — gestiona conexiones, claves y sesiones
<h1 align="center">ESSH</h1>
<p align="center">
<strong>Un espacio de trabajo SSH con sesiones persistentes y paneles de estado en vivo.</strong>
</p>
<p align="center">
<a href="https://github.com/matthart1983/essh/releases/latest"><img src="https://img.shields.io/github/v/release/matthart1983/essh" alt="Latest release"></a>
<a href="https://github.com/matthart1983/essh/releases"><img src="https://img.shields.io/github/downloads/matthart1983/essh/total" alt="Release downloads"></a>
<a href="https://github.com/matthart1983/essh/actions/workflows/ci.yml"><img src="https://github.com/matthart1983/essh/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI status"></a>
<a href="#install"><img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux-blue" alt="Platforms: macOS and Linux"></a>
<a href="https://github.com/matthart1983/essh/releases/latest"><img src="https://img.shields.io/badge/architecture-x86__64%20%7C%20ARM64-blue" alt="Architectures: x86_64 and ARM64"></a>
<a href="https://github.com/matthart1983/essh/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT"></a>
</p>
Mantén los shells remotos en ejecución a través de caídas de conexión, cambia entre hosts con
teclas o el ratón, y comprueba el estado del sistema sin salir de tu terminal.
ESSH usa OpenSSH para las conexiones y tmux para mantener tu trabajo vivo.
## Véalo en acción
[](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)
**[Ver la demo de 42 segundos](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)** ·
[Descargar la repetición del navegador](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-replay.html)
Inspecciona discos con `df` y `lsblk`, encuentra procesos ocupados con `ps`, muestrea la actividad
del sistema con `vmstat`, y comprueba sockets e interfaces con `ss` e `ip`.
La demo muestra el cambio de tema de terminal, vistas de estado lateral, media y completa,
cambio de sesión, ayuda,
y una conexión caída recuperando el mismo shell remoto.
## Instalar
Descarga un binario para **Linux o macOS**, en **x86_64 o ARM64**, desde
[Releases](https://github.com/matthart1983/essh/releases/latest). Extrae el archivo
y coloca `essh` en algún lugar de tu `PATH`.
Necesitas **tmux 3.3+ y OpenSSH localmente**, y **tmux en cada host remoto**.
Las métricas de estado detalladas están disponibles para hosts Linux.
O compila desde el código fuente con Rust:
```sh
git clone https://github.com/matthart1983/essh.git
cd essh
cargo build --release
./target/release/essh
```
## Conectar a un host
ESSH lee los hosts desde `~/.ssh/config`, su propia configuración y su caché de hosts.
Por ejemplo:
```sshconfig
Host web-01
HostName 192.168.1.20
User deploy
IdentityFile ~/.ssh/id_ed25519
```
Ejecuta `essh`, selecciona un host y pulsa **Enter**. Usa **/** para filtrar hosts y
**Esc** para borrar el filtro. Pulsa **a** para añadir un host o **e** para editar uno.
OpenSSH gestiona la autenticación y la comprobación de claves de host.
## Orientarse
| Tecla | Acción |
| --- | --- |
| **F1** | Abrir o cerrar la ayuda |
| **F2** | Ciclar terminal → estado lateral → estado medio → estado completo → terminal |
| **F3** | Abrir Sesiones; selecciona una sesión o pulsa **n** para iniciar otra |
| **F4** | Volver al menú principal mientras las sesiones siguen ejecutándose |
| **F5 / F6** | Cambiar a la sesión anterior / siguiente |
| **h** en Hosts | Abrir el estado del host seleccionado |
| **r** tras una caída de conexión | Reconectar |
| **q** en Hosts | Salir de ESSH mientras el trabajo remoto sigue ejecutándose |
Haz clic en las pestañas de sesión y en los controles de navegación para cambiar de vista. Haz clic en una fila para seleccionarla;
haz doble clic para conectar o cambiar. Usa la rueda del ratón para desplazarte, haz clic en los paneles
para enfocarlos y arrastra los divisores para redimensionarlos.
Si tu teclado usa la fila de función para el brillo o el volumen, mantén **Fn**
mientras pulsas una tecla F, o activa las teclas de función estándar en los ajustes de tu teclado.
Los controles de navegación también son clicables, y **F1** lista las teclas disponibles.
## Tu shell y tema
Las sesiones remotas inician el shell de inicio de sesión configurado de la cuenta remota y cargan sus
archivos de inicio normales—zsh, bash, fish, o el shell que use esa cuenta.
Tu prompt, alias y atajos de teclado del shell provienen de esa cuenta remota.
Los shells existentes conservan su estado en ejecución cuando te reconectas.
ESSH usa los colores de tu terminal por defecto. Elige un tema para cambiar el primer plano y el fondo del shell
junto con el panel:
```sh
essh --theme terminal
essh --theme netwatch
essh --theme light
```
Pulsa **t** en los menús o vistas de estado, o **Ctrl+A**, luego **t** desde un shell,
para abrir el selector de temas. Las teclas de flecha previsualizan cada paleta; **Enter** o un clic
la aplica y la guarda. **Esc** cancela sin cambiar tu preferencia.
Elige **Terminal**, **Netwatch**, **Light**, **Solarized**, **Dracula**,
**Nord**, **Ocean** o **Sky**. Netwatch usa un fondo carbón con encabezados cian
y medidores verdes. El tema seleccionado se aplica en menús, vistas de estado,
barras de navegación y paneles de terminal. Elige **Terminal** para restaurar los
colores nativos de tu terminal. Los programas y prompts aún pueden establecer sus propios colores.
Para guardar una preferencia, establece `theme = "terminal"` (u otro nombre de tema) al principio
de `~/.essh/config.toml`. Aplícalo a un espacio de trabajo abierto con
`essh tmux refresh`; las sesiones SSH siguen ejecutándose. Tu emulador de terminal controla
la fuente y el tamaño de fuente.
## Elige tu vista de estado
Pulsa **F2** para ciclar entre:
| Vista | Lo que ves |
| --- | --- |
| Terminal | Tu shell con las barras de sesión y navegación |
| Estado lateral | Una franja estrecha con tráfico, CPU, memoria, disco y latencia |
| Estado medio | Tu shell y un panel compartiendo la terminal |
| Estado completo | Tráfico de red, núcleos de CPU, memoria, almacenamiento, pares y procesos |
Los paneles usan medidores finos y lecturas en vivo. Las lecturas no disponibles muestran **—**;
los hosts desconectados están claramente marcados. Las terminales estrechas omiten los diseños laterales.
En el panel:
- **Tab** selecciona un panel; las **flechas** y la **rueda del ratón** desplazan.
- **i** selecciona una interfaz de red; **c / m** ordena los procesos por CPU o memoria.
- **Izquierda / Derecha** navega por los hosts, incluidos los hosts sin una sesión conectada.
- **Esc** cierra el estado completo y restaura la vista lateral anterior.
- **F2** desde el estado completo vuelve a la terminal con el estado lateral desactivado.
Para acceso directo, pulsa **Ctrl+A**, suéltalo, luego **h** para el estado completo o
**m** para ciclar estado lateral → estado medio → desactivado.
## Trabajar entre sesiones y paneles
Usa **F3**, luego **n**, para abrir otra sesión independiente. Cambia con
**F5 / F6**, el selector de Sesiones o el ratón. **F4** vuelve a la lista de hosts
sin terminar tus sesiones.
Los IDs de sesión sobreviven a los reinicios locales. Reconectar vuelve a adjuntar el shell remoto
cuando aún existe; si ha terminado, ESSH inicia un nuevo shell. El estado remoto de una sesión
desconectada permanece sin verificar hasta que te reconectas.
**Ctrl+A** controla el tmux local. **Ctrl+B** controla el tmux en el host remoto.
Pulsa el prefijo, suéltalo, luego pulsa la siguiente tecla:
| Teclas | Acción |
| --- | --- |
| **Ctrl+B**, luego **%** | Dividir la terminal remota lado a lado |
| **Ctrl+B**, luego **"** | Dividir la terminal remota arriba y abajo |
| **Ctrl+B**, luego una **flecha** | Moverse entre paneles remotos |
| **Ctrl+A**, luego **v** | Enviar la siguiente tecla directamente a la aplicación remota |
| **Ctrl+A**, luego **x** | Terminar una sesión remota tras confirmación |
F1–F6 están reservadas para ESSH. Usa **Ctrl+A**, luego **v**, cuando una aplicación remota
necesite una de esas teclas.
## Desarrollo
```sh
cargo fmt --check
cargo test
cargo clippy --all-targets --all-features -- -D warnings
cargo build --release
ESSH_BIN=target/release/essh python3 scripts/test-tmux-v3.py
```
La comprobación de regresión en vivo usa un servidor SSH aislado y sockets tmux.
[Grabación y verificación de la demo](https://github.com/matthart1983/essh/blob/main/docs/demo-v3.md) explica cómo reproducir el recorrido.
Para contribuir, crea una rama, haz tu cambio, ejecuta las comprobaciones y abre un pull request.
## Licencia
[MIT](https://github.com/matthart1983/essh/blob/main/LICENSE)