Termavox

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.

Candidata à v0.1.0Software livre, sob a AGPL-3.0Código-fonte no GitHub

A área de trabalho do Termavox: sessões nomeadas agrupadas por estado à esquerda e um shell ao vivo à direita

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 comumTermavox
Você fecha a aba do navegadorSSH web comumA sessão SSH morreTermavoxContinuaNada; a sessão segue rodando
Você abre de novo em outro aparelhoSSH web comumComeça do zeroTermavoxMesma telaNa hora, até apps de tela cheia
O Wi-Fi cai por um minutoSSH web comumA sessão se perdeTermavoxReconectaPor trás; o shell nem percebe
O serviço do Termavox reiniciaSSH web comum—TermavoxRestauraAs sessões protegidas voltam como estavam
Dois aparelhos abrem a mesma sessãoSSH web comumEm geral não dáTermavoxOs doisQuem está digitando define o tamanho

Como funciona

Três ideias sustentam o projeto.

Qualquer navegador Uma janela sincronizada, no notebook ou no celular
Termavox Auto-hospedado: os emuladores de terminal de referência
Seus servidores tmux invisível: shell, 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

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.