
Estabeleça acesso remoto seguro a uma máquina com shell interativo, transferência de arquivos e proxy web sobre WebRTC peer-to-peer criptografado de ponta a ponta, usando um navegador ou CLI sem encaminhamento de portas ou contas.
bitbang é uma ferramenta multitool de acesso remoto, um único binário estático. A partir de qualquer navegador: um shell interativo e acesso ao navegador de arquivos da máquina remota. Você também pode acessar aplicações web na rede dessa máquina. Além do navegador, ele faz encaminhamento de portas TCP, cópia de arquivos e compartilhamento de terminal. Não requer conta nem configuração — simplesmente funciona.

Na máquina que você deseja acessar:``` curl -sSfL bitba.ng/install | sh bitbang serve
`serve` imprime um URL. Abra-o em qualquer navegador e você obtém um terminal, um navegador de arquivos e um proxy para a rede dessa máquina — ou alcance a mesma máquina a partir de outro terminal com `bitbang connect <url>`, que adiciona encaminhamento de porta (`-L`) e cópia de arquivos (`bitbang cp`). A conexão é criptografada de ponta a ponta e ponto a ponto; o servidor `bitba.ng` apresenta as duas extremidades e depois se afasta.
`bitbang` é um único binário Go estático. Faz parte do [projeto BitBang](https://github.com/richlegrand/bitbang); este [whitepaper](https://github.com/richlegrand/bitbang/blob/main/whitepaper.md) aborda o design em profundidade.
## Como se compara
| | ngrok | Tailscale | `bitbang` |
| ------------------------------ | ---------------------- | ------------------------------ | ------------------- |
| Configuração antes do primeiro uso | Conta + authtoken | Conta + login em cada dispositivo | **Execute um comando** |
| Para compartilhar algo, você executa | um servidor web, além do ngrok | o cliente deles em ambas as máquinas | **`bitbang serve`** |
| O que um navegador na extremidade oposta obtém | o servidor web que você já estava executando | nada — ele precisa do cliente deles | **um terminal, um navegador de arquivos e aplicativos web na rede remota** |
| Caminho de dados | servidores deles | P2P (fallback de relay) | **P2P (fallback de relay)** |
| Criptografado de ponta a ponta | Não por padrão | Sim | **Sim** |
## Receitas rápidas
**Acesse um serviço em casa**
- [Monte seu NAS doméstico de qualquer lugar (SMB)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#mount-your-home-nas-from-anywhere-smb)
- [Assista à sua biblioteca de mídia de qualquer lugar (Jellyfin)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-your-media-library-from-anywhere-jellyfin)
- [Use seu próprio LLM de qualquer lugar (Ollama, Open WebUI)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#use-your-own-llm-from-anywhere-ollama-open-webui)
- [Verifique suas câmeras de segurança (Frigate)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-security-cameras-frigate)
- [Acesse sua automação residencial sem expô-la (Home Assistant)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-your-home-automation-without-exposing-it-home-assistant)
- [Imprima na sua impressora doméstica (IPP, CUPS)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#print-to-your-home-printer-ipp-cups)
**Acesse uma máquina**
- [Obtenha um shell em uma máquina atrás de NAT](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-on-a-machine-behind-nat)
- [Obtenha um shell do seu celular](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-from-your-phone)
- [Área de trabalho remota em uma máquina Windows (RDP)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#remote-desktop-into-a-windows-machine-rdp)
- [Acesse uma área de trabalho Linux ou Mac (VNC)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-linux-or-mac-desktop-vnc)
- [SSH para uma máquina sem porta aberta (OpenSSH)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#ssh-to-a-machine-with-no-open-port-openssh)
- [Configure um Raspberry Pi headless](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#set-up-a-headless-raspberry-pi)
**Compartilhe com outra pessoa**
Compartilhar envolve simplesmente dar a alguém um URL único ou código QR que concede acesso. As permissões podem ser personalizadas e definidas para expirar em minutos, horas, etc.
- [Compartilhe arquivos sem enviá-los para lugar nenhum](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#share-files-without-uploading-them-anywhere)
- [Mostre seu projeto a alguém](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#show-someone-your-project)
- [Dê a alguém um acesso que expira](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#give-someone-access-that-expires)
- [Verifique sua sessão de agente pelo celular (Claude Code, tmux)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-agent-session-from-your-phone-claude-code-tmux)
- [Conserte o roteador de outra pessoa](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#fix-someone-elses-router)
**Desenvolvimento e dispositivos**
- [Acesse um banco de dados a partir da sua máquina de desenvolvimento (Postgres, MySQL)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-database-from-your-dev-machine-postgres-mysql)
- [Sincronize dispositivos que não conseguem se encontrar (Syncthing)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#sync-devices-that-cannot-find-each-other-syncthing)
- [Assista a um robô a partir de um navegador (ROS, Foxglove)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-a-robot-from-a-browser-ros-foxglove)
**Técnicas**
- [O que um listener de encaminhamento expõe](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#what-a-forwarding-listener-exposes)
- [Permita que outras máquinas na sua LAN usem um encaminhamento](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#let-other-machines-on-your-lan-use-a-forward)
- [Conhecido por não funcionar](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#known-not-to-work)
## Usando `bitbang`
Toda conexão tem duas extremidades: um **listener** (`bitbang serve`, executado na máquina que está sendo acessada) e um **connector** (um navegador, ou a CLI `bitbang`, na máquina que está acessando). Um único URL de listener atende aos dois tipos de connector.
### O listener: `bitbang serve````
bitbang serve # everything: shell + proxy + files + forward
bitbang serve shell # just a terminal
bitbang serve files ~/share # just a directory (-files-upload to allow uploads)
bitbang serve proxy localhost:8080 # just one web app, straight at the URL
bitbang serve proxy a.lan:80,b.lan:80 # ...or several, chosen in the browser
bitbang serve forward 127.0.0.1:22 # just TCP, for `connect -L`
bitbang serve shell files ~/share proxy nas.lan:8096 # any combination
Cada um imprime um código QR, um URL e um código de emparelhamento. O modo determina o que o
ouvinte pode fazer em geral: serve shell não tem encaminhamento a conceder, e um
ouvinte apenas de encaminhamento nunca inicia uma shell, portanto não há nada para escalar.