Seus terminais, sempre ligados.
Feche o navegador, volte de qualquer lugar e continue exatamente de onde parou. O Termavox é um runtime auto-hospedado que mantém suas sessões SSH abertas num servidor que você controla; o navegador é só uma janela para elas.
A vida do navegador não é a vida do terminal.
Na maioria das ferramentas de SSH pela web, a aba do navegador é a sessão: fechou o notebook ou caiu o Wi-Fi, a conexão morre junto. O Termavox inverte isso. Ele mantém cada sessão aberta no servidor dele, sem prazo, até você encerrá-la. Os navegadores só se conectam e se desconectam, e quando você volta, do mesmo notebook, de outro computador ou do celular, o terminal está exatamente como você deixou.
| O que acontece quando… | SSH web comum | Termavox |
|---|---|---|
| Você fecha a aba do navegador | SSH web comumA sessão SSH morre | TermavoxContinuaNada; a sessão segue rodando |
| Você abre de novo em outro aparelho | SSH web comumComeça do zero | TermavoxMesma telaNa hora, até apps de tela cheia |
| O Wi-Fi cai por um minuto | SSH web comumA sessão se perde | TermavoxReconectaPor trás; o shell nem percebe |
| O serviço do Termavox reinicia | SSH web comum— | TermavoxRestauraAs sessões protegidas voltam como estavam |
| Dois aparelhos abrem a mesma sessão | SSH web comumEm geral não dá | TermavoxOs doisQuem está digitando define o tamanho |
Como funciona
Três ideias sustentam o projeto.
vim, htop…
- Um emulador de terminal mora no servidor
- Para cada sessão, o Termavox mantém um emulador de referência alimentado com a saída SSH bruta. O navegador que se conecta recebe uma foto desse estado e depois a saída ao vivo, então desenha uma cópia exata, com tela alternativa e modos do terminal.
- O tmux protege as sessões, e você nunca o vê
- Cada sessão SSH roda dentro de um tmux só dela no servidor, controlado pelo modo de controle do tmux: sem barra de status, sem tecla de prefixo, com a rolagem normal. Depois de uma queda de rede ou de um reinício, o Termavox se reconecta e reconstrói a tela e o histórico. Servidores sem tmux também funcionam, marcados como sem proteção.
- As sessões pertencem ao serviço, não ao navegador
- O app web cuida de usuários, servidores, credenciais e layout; o gerenciador de sessões cuida das conexões, dos emuladores e da reconexão. Publicar uma versão nova do app web nunca derruba um terminal.
Onde ele se encaixa
Para quem mantém shells abertos em máquinas remotas e quer chegar a eles de qualquer lugar.
- Um servidor de desenvolvimento ou uma VPS
- Editores, builds, testes em modo watch e logs continuam rodando na máquina onde o código está, e você retoma tudo do notebook, de outro computador ou do celular.
- Tarefas longas e agentes de código
- Um deploy, uma migração, um processamento de dados ou um agente de IA trabalhando no terminal continua enquanto o notebook dorme. Acompanhe de qualquer navegador.
- Um shell remoto no navegador
- Um cliente SSH web auto-hospedado, e uma alternativa ao Apache Guacamole quando o que você precisa são terminais que continuam abertos: sem cliente SSH nem chave no aparelho que você estiver usando, com chaves do host verificadas e credenciais cifradas no seu servidor.
- Plantão pelo celular
- A lista de sessões, um terminal em tela cheia e uma barra de teclas com Esc, Ctrl, Alt, Tab e as setas.
Ele trabalha junto com as ferramentas que você já usa. O Termavox roda o tmux por você, de forma invisível, então você nunca mais digita tmux attach; o seu próprio tmux, o Zellij, o Herdr ou qualquer outro programa de terminal continua rodando dentro de uma sessão, mesmo depois que o navegador fecha.
Por dentro
Capturas reais, feitas contra servidores SSH de teste. A interface também fala português.
O que você ganha
- Sessões SSH persistentes, que sobrevivem a abas fechadas, redes instáveis e reinícios do serviço.
- Proteção automática e invisível com tmux, detectada por servidor, com um aviso honesto quando falta.
- Uma área de trabalho com lista de sessões, abas e painéis divididos, guardada no servidor e restaurada em qualquer navegador.
- Um painel de arquivos ao lado de cada terminal: enviar, baixar, renomear, apagar e criar pastas, pela própria conexão SSH da sessão.
- Dá para usar no celular, com layout responsivo e uma barra de teclas extras.
- Vários usuários, isolados: cada um vê só os próprios servidores, credenciais e sessões.
- Feito como um bastion: credenciais cifradas com uma chave que só o plano de dados tem, confiança explícita nas chaves do host, login em duas etapas e log de auditoria.
- Chaves SSH, senhas e pedidos de 2FA, com os pedidos repassados ao seu navegador.
- Inglês e português do Brasil.
- Instalação com um comando, usando Docker Compose e Caddy, com HTTPS automático.
Rode o Termavox
Três contêineres atrás de uma origem só: o Caddy para o TLS, o app web e o gerenciador de sessões. Você precisa de Docker com Compose v2 num host Linux.
Uma release
Com as imagens que ela publica para amd64 (arm64 em breve).
git clone https://github.com/ativaone/termavox.git termavox && cd termavox
git checkout v0.1.0 # a release a instalar (veja Releases)
deploy/scripts/init-secrets.sh # gera os segredos; faça backup de deploy/secrets/master_key
cp deploy/.env.example deploy/.env # as configurações: edite antes de subir (abaixo)
docker compose -f deploy/compose.yaml pull # as imagens da release, do ghcr.io
docker compose -f deploy/compose.yaml up -d # sobe tudo
docker compose -f deploy/compose.yaml logs web | grep "setup token:" | tail -n 1
O código mais recente
Com as imagens compiladas neste host: precisa de uns 2 GB de memória livres e, por enquanto, é também o jeito de rodar em arm64.
git clone https://github.com/ativaone/termavox.git termavox && cd termavox
deploy/scripts/init-secrets.sh # gera os segredos; faça backup de deploy/secrets/master_key
cp deploy/.env.example deploy/.env # as configurações: edite antes de subir (abaixo)
docker compose -f deploy/compose.yaml up -d --build
docker compose -f deploy/compose.yaml logs web | grep "setup token:" | tail -n 1
Edite o deploy/.env antes de subir. Do jeito que é copiado, ele atende em https://localhost com um certificado da CA local do Caddy, para testar nesta máquina. Para outro nome, coloque-o em TERMAVOX_DOMAIN, com TERMAVOX_TLS=auto para um domínio público (certificado da Let's Encrypt) ou internal para um nome da rede local ou um endereço IP. O último comando mostra o token de uso único e o endereço onde ele cria o primeiro admin. O guia de instalação, em inglês, cobre domínio e TLS, proxy reverso, verificação das imagens, backups, atualizações e solução de problemas.