Como Encaminhar um Terminal Diretamente para o Navegador Usando WeTTY
Imagine o seguinte: você precisa urgentemente acessar um servidor doméstico ou uma máquina virtual de trabalho a partir de um tablet, do laptop de outra pessoa ou de um computador corporativo com políticas de segurança rígidas onde a porta 22 está completamente bloqueada e você não consegue instalar um cliente SSH adequado. Você abre um navegador, digita um endereço e obtém uma linha de comando completa com o seu shell familiar.
É exatamente para isso que o projeto WeTTY (Web + TTY) foi criado.

Por Trás das Cortinas
Soluções mais antigas como Ajaxterm ou Anyterm eram dolorosamente lentas porque dependiam de requisições HTTP regulares indo e voltando. WeTTY funciona de maneira diferente. O backend é construído com TypeScript e Node.js, a comunicação com o navegador acontece através de WebSockets, e a renderização é tratada pelo emulador de terminal xterm.js (o mesmo que alimenta o VS Code).
Graças à combinação de xterm.js e WebSocket, a latência de entrada é quase imperceptível se você tiver uma conexão de internet estável. Utilitários com pseudo-gráficos funcionam sem problemas na janela do navegador: htop, tmux, mc, vim e nano. Suporte a mouse, atalhos de teclado e cores do terminal funcionam conforme esperado.
Como Iniciar
Você pode implementar o utilitário de duas formas rápidas: via npm ou em um container Docker.
Opção 1. Instalação via npm
Se a máquina já tiver o Node.js versão 20 ou superior, junto com as ferramentas de compilação (make, python, build-essential), o utilitário pode ser instalado com um único comando:
npm -g i wetty
Após a instalação, inicie o serviço:
wetty --port 3000
Agora navegue até http://localhost:3000 e faça login com o usuário desejado. Se o WeTTY estiver sendo executado como um usuário comum, ele estabelecerá uma sessão SSH para localhost por padrão. Executando como root, invocará /bin/login em vez disso.
Opção 2. Execução no Docker
Pessoalmente, acho mais fácil manter utilitários assim em containers para evitar sobrecarregar o host com pacotes globais desnecessários do Node.js:
docker run --rm -p 3000:3000 wettyoss/wetty --ssh-host=192.168.1.50
Substitua 192.168.1.50 pelo endereço IP do host ao qual você deseja se conectar via SSH.
Parâmetros Úteis de Inicialização
O utilitário oferece configuração flexível através de flags de linha de comando:
--ssh-hoste--ssh-portredirecionam a conexão para um servidor remoto separado.--ssh-userdefine um usuário padrão para que você não precise digitar o login toda vez.--ssl-keye--ssl-certhabilitam criptografia direta do tráfego.--allow-iframepermite embedar o terminal em iframes em outros sites (por exemplo, em dashboards ou painéis de monitoramento).
Se você não quiser especificar flags toda vez que iniciar, pode empacotar os parâmetros em um arquivo de configuração e passá-lo via --conf.
Segurança e Uso em Produção
Expor uma porta HTTP desprotegida do WeTTY à internet não é absolutamente recomendado. Qualquer atacante poderia tentar forçar senhas por força bruta ou interceptar tráfego não criptografado.
Na prática, um proxy reverso (NGINX, Traefik ou Caddy) é tipicamente colocado na frente do WeTTY para lidar com várias responsabilidades:
- Emitir e renovar certificados SSL gratuitos do Let's Encrypt.
- Proxy de conexões WebSocket.
- Uma camada adicional de autorização através de Basic Auth ou Authelia.
- Restringir o acesso com base em listas de IPs permitidos.
Aqui está um exemplo típico de configuração do NGINX:
location /wetty/ {
proxy_pass http://127.0.0.1:3000/wetty/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 43200000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
Não se esqueça de executar o próprio WeTTY com a flag --base /wetty/ para que os caminhos de roteamento se alinhem corretamente.
Para Quem Este Projeto É
WeTTY atende a necessidades práticas específicas:
- Administração rápida de servidores domésticos (Home Lab) e roteadores diretamente de um celular ou iPad.
- Configuração de ambientes de demonstração e sandboxes de treinamento onde estudantes precisam de acesso ao shell sem configurar clientes SSH.
- Embedar uma janela de terminal em painéis internos de gerenciamento de infraestrutura baseados na web.
- Acessar servidores de redes corporativas isoladas onde apenas as portas 80 e 443 estão abertas.
Se você precisa de uma forma leve de iniciar um terminal no navegador sem interfaces web pesadas como Cockpit ou Proxmox, o WeTTY faz isso em apenas alguns minutos. Basta iniciar o container atrás de um proxy reverso e adicionar autenticação.
Projetos relacionados