
Cliente SSH aprimorado com TUI — gerencie conexões, chaves e sessões
<h1 align="center">ESSH</h1>
<p align="center">
<strong>Um workspace SSH com sessões persistentes e dashboards de saúde em tempo real.</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>
Mantenha shells remotas em execução mesmo com quedas de conexão, alterne entre hosts com
teclas ou o mouse, e verifique a saúde do sistema sem sair do seu terminal.
O ESSH usa OpenSSH para conexões e tmux para manter seu trabalho ativo.
## Veja em ação
[](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)
**[Assista à demonstração de 42 segundos](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-demo.mp4)** ·
[Baixe a reprodução no navegador](https://github.com/matthart1983/essh/releases/download/v0.4.1/essh-v3-replay.html)
Inspecione discos com `df` e `lsblk`, encontre processos ocupados com `ps`, amostre a atividade
do sistema com `vmstat`, e verifique sockets e interfaces com `ss` e `ip`.
A demonstração mostra a troca de tema do terminal, visualizações de saúde lateral, meia e completa,
troca de sessão, ajuda,
e uma conexão perdida recuperando a mesma shell remota.
## Instalação
Baixe um binário para **Linux ou macOS**, em **x86_64 ou ARM64**, em
[Releases](https://github.com/matthart1983/essh/releases/latest). Extraia o arquivo
e coloque `essh` em algum lugar do seu `PATH`.
Você precisa de **tmux 3.3+ e OpenSSH localmente**, e **tmux em cada host remoto**.
Métricas detalhadas de saúde estão disponíveis para hosts Linux.
Ou compile a partir do código-fonte com Rust:
```sh
git clone https://github.com/matthart1983/essh.git
cd essh
cargo build --release
./target/release/essh
```
## Conecte-se a um host
O ESSH lê hosts de `~/.ssh/config`, de sua própria configuração e de seu cache de hosts.
Por exemplo:
```sshconfig
Host web-01
HostName 192.168.1.20
User deploy
IdentityFile ~/.ssh/id_ed25519
```
Execute `essh`, selecione um host e pressione **Enter**. Use **/** para filtrar hosts e
**Esc** para limpar o filtro. Pressione **a** para adicionar um host ou **e** para editar um.
O OpenSSH cuida da autenticação e da verificação de chave de host.
## Encontre seu caminho
| Tecla | Ação |
| --- | --- |
| **F1** | Abrir ou fechar a ajuda |
| **F2** | Alternar terminal → saúde lateral → meia saúde → saúde completa → terminal |
| **F3** | Abrir Sessões; selecione uma sessão ou pressione **n** para iniciar outra |
| **F4** | Retornar ao menu principal enquanto as sessões continuam em execução |
| **F5 / F6** | Alternar para a sessão anterior / próxima |
| **h** em Hosts | Abrir a saúde do host selecionado |
| **r** após uma queda de conexão | Reconectar |
| **q** em Hosts | Sair do ESSH enquanto o trabalho remoto continua em execução |
Clique nas abas de sessão e nos controles de navegação para alternar entre visualizações. Clique em uma linha para selecioná-la;
clique duas vezes para conectar ou alternar. Use a roda do mouse para rolar, clique nos painéis
para focá-los, e arraste os divisores para redimensioná-los.
Se seu teclado usa a linha de função para brilho ou volume, segure **Fn**
enquanto pressiona uma tecla F, ou habilite teclas de função padrão nas configurações do seu teclado.
Os controles de navegação também são clicáveis, e **F1** lista as teclas disponíveis.
## Sua shell e tema
As sessões remotas iniciam a shell de login configurada da conta remota e carregam seus
arquivos de inicialização normais—zsh, bash, fish, ou qualquer shell que essa conta use.
Seu prompt, aliases e atalhos de teclado da shell vêm dessa conta remota.
Shells existentes mantêm seu estado em execução quando você se reconecta.
O ESSH usa as cores do seu terminal por padrão. Escolha um tema para alterar a cor de
primeiro plano e fundo da shell junto com o dashboard:
```sh
essh --theme terminal
essh --theme netwatch
essh --theme light
```
Pressione **t** nos menus ou nas visualizações de saúde, ou **Ctrl+A**, depois **t** de uma shell,
para abrir o seletor de temas. As teclas de seta pré-visualizam cada paleta; **Enter** ou um clique
aplica e salva. **Esc** cancela sem alterar sua preferência.
Escolha **Terminal**, **Netwatch**, **Light**, **Solarized**, **Dracula**,
**Nord**, **Ocean**, ou **Sky**. O Netwatch usa um fundo carvão com títulos ciano
e medidores verdes. O tema selecionado se aplica a menus, visualizações de saúde,
barras de navegação e painéis de terminal. Escolha **Terminal** para restaurar as
cores nativas do seu terminal. Programas e prompts ainda podem definir suas próprias cores.
Para salvar uma preferência, defina `theme = "terminal"` (ou outro nome de tema) no topo
de `~/.essh/config.toml`. Aplique-a a um workspace aberto com
`essh tmux refresh`; as sessões SSH continuam em execução. Seu emulador de terminal controla
a fonte e o tamanho da fonte.
## Escolha sua visualização de saúde
Pressione **F2** para alternar entre:
| Visualização | O que você vê |
| --- | --- |
| Terminal | Sua shell com as barras de sessão e navegação |
| Saúde lateral | Uma faixa estreita com tráfego, CPU, memória, disco e latência |
| Meia saúde | Sua shell e um dashboard compartilhando o terminal |
| Saúde completa | Tráfego de rede, núcleos de CPU, memória, armazenamento, peers e processos |
Os dashboards usam medidores finos e leituras em tempo real. Leituras indisponíveis mostram **—**;
hosts desconectados são claramente marcados. Terminais estreitos pulam os layouts laterais.
No dashboard:
- **Tab** seleciona um painel; **setas** e a **roda do mouse** rolam.
- **i** seleciona uma interface de rede; **c / m** ordena processos por CPU ou memória.
- **Esquerda / Direita** navega pelos hosts, incluindo hosts sem uma sessão conectada.
- **Esc** fecha a saúde completa e restaura a visualização lateral anterior.
- **F2** a partir da saúde completa retorna ao terminal com a saúde lateral desativada.
Para acesso direto, pressione **Ctrl+A**, solte-o, depois **h** para saúde completa ou
**m** para alternar saúde lateral → meia saúde → desativada.
## Trabalhe entre sessões e painéis
Use **F3**, depois **n**, para abrir outra sessão independente. Alterne com
**F5 / F6**, o seletor de Sessões, ou o mouse. **F4** retorna à lista de hosts
sem encerrar suas sessões.
Os IDs de sessão sobrevivem a reinicializações locais. Reconectar reanexa a shell remota
quando ela ainda existe; se ela terminou, o ESSH inicia uma nova shell. O estado remoto de uma
sessão desconectada permanece não verificado até você se reconectar.
**Ctrl+A** controla o tmux local. **Ctrl+B** controla o tmux no host remoto.
Pressione o prefixo, solte-o, depois pressione a próxima tecla:
| Teclas | Ação |
| --- | --- |
| **Ctrl+B**, depois **%** | Dividir o terminal remoto lado a lado |
| **Ctrl+B**, depois **"** | Dividir o terminal remoto em cima e embaixo |
| **Ctrl+B**, depois uma **seta** | Mover entre painéis remotos |
| **Ctrl+A**, depois **v** | Enviar a próxima tecla diretamente para a aplicação remota |
| **Ctrl+A**, depois **x** | Encerrar uma sessão remota após confirmação |
F1–F6 são reservadas para o ESSH. Use **Ctrl+A**, depois **v**, quando uma aplicação remota
precisar de uma dessas teclas.
## Desenvolvimento
```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
```
A verificação de regressão ao vivo usa um servidor SSH isolado e sockets tmux.
[Gravação e verificação da demonstração](https://github.com/matthart1983/essh/blob/main/docs/demo-v3.md) explica como reproduzir o tour.
Para contribuir, crie um branch, faça sua alteração, execute as verificações e abra um pull request.
## Licença
[MIT](https://github.com/matthart1983/essh/blob/main/LICENSE)