Como usar o tmux para nunca mais perder uma sessão SSH
1. Introdução ao tmux: Por que você precisa dele
Você já passou pela frustração de estar no meio de uma operação crítica via SSH — uma migração de banco de dados, um deploy em produção, uma compilação demorada — e de repente a conexão cai? Seja por queda de rede, timeout do servidor ou fechamento acidental do terminal, perder uma sessão SSH significa perder todo o progresso, reexecutar comandos e, em alguns casos, corromper processos em andamento.
O tmux (Terminal Multiplexer) resolve esse problema de forma definitiva. Ele mantém suas sessões ativas no servidor, independentemente do cliente SSH. Você pode desligar o notebook, trocar de rede, fechar o terminal e, ao reconectar, encontrar tudo exatamente como deixou.
Diferente de alternativas como o clássico screen (mais antigo e com menos recursos) ou soluções modernas como byobu (que é um wrapper do tmux) e abduco (mais minimalista), o tmux oferece o melhor equilíbrio entre funcionalidade, desempenho e ecossistema de plugins.
2. Instalação e primeiros passos
A instalação é simples em qualquer sistema:
# Ubuntu/Debian
sudo apt install tmux
# Fedora/RHEL
sudo dnf install tmux
# Arch Linux
sudo pacman -S tmux
# macOS (Homebrew)
brew install tmux
Para iniciar sua primeira sessão, use:
tmux new -s meuservidor
Você verá uma barra verde na parte inferior — isso indica que está dentro do tmux. A estrutura básica do tmux é hierárquica:
- Sessões: grupos independentes de trabalho (ex: uma para cada projeto)
- Janelas: abas dentro de uma sessão (ex: uma para logs, outra para código)
- Painéis: divisões de tela dentro de uma janela
O comando principal do tmux é o prefixo — por padrão Ctrl+b. Toda combinação de teclas começa com ele. Você pode personalizar isso no arquivo de configuração.
3. Gerenciamento de sessões: o coração da persistência
A verdadeira magia do tmux está nas sessões persistentes. Veja os comandos essenciais:
# Criar nova sessão nomeada
tmux new -s projeto-api
# Listar todas as sessões ativas
tmux ls
# Anexar a uma sessão existente
tmux attach -t projeto-api
# Desanexar da sessão (mantém os processos rodando)
Ctrl+b d
# Renomear sessão atual
Ctrl+b $
# Fechar uma sessão específica
tmux kill-session -t projeto-api
Cenário prático: Você está rodando um servidor de desenvolvimento. Basta criar a sessão, iniciar o servidor e desanexar com Ctrl+b d. Mesmo que o SSH caia, o servidor continua. Ao reconectar, execute tmux attach para retomar.
Para navegar entre múltiplas sessões, use Ctrl+b s — isso abre um seletor visual onde você escolhe para qual sessão ir.
4. Trabalhando com janelas e painéis
Janelas funcionam como abas de navegador dentro de uma sessão:
# Criar nova janela
Ctrl+b c
# Navegar entre janelas (próxima/anterior)
Ctrl+b n # próxima
Ctrl+b p # anterior
# Listar janelas para seleção
Ctrl+b w
# Fechar janela atual
Ctrl+b &
Painéis permitem dividir a tela para multitarefa visual:
# Dividir horizontalmente (esquerda/direita)
Ctrl+b %
# Dividir verticalmente (cima/baixo)
Ctrl+b "
# Navegar entre painéis com setas
Ctrl+b ← ↑ → ↓
# Redimensionar painel
Ctrl+b (segurar Ctrl) + setas
# Fechar painel atual
Ctrl+b x
# Alternar entre layouts predefinidos
Ctrl+b Espaço
Exemplo prático: Em uma janela, divida em três painéis: um para editar código (vim), outro para rodar testes, e outro para monitorar logs. Tudo visível simultaneamente.
5. Copiar, colar e rolar no histórico
Um dos recursos mais úteis é o modo de rolagem, já que o tmux não usa a rolagem nativa do terminal:
# Ativar modo de rolagem
Ctrl+b [
# Navegar com setas, PageUp, PageDown
# Sair do modo de rolagem
q
Para copiar texto (modo vi — ative no ~/.tmux.conf):
# Iniciar seleção
Espaço
# Mover cursor para selecionar
# Copiar seleção
Enter
# Colar do buffer
Ctrl+b ]
Configure o buffer para ser ilimitado no ~/.tmux.conf:
set -g history-limit 50000
6. Personalização e configuração avançada
Crie o arquivo ~/.tmux.conf para personalizar tudo:
# Alterar prefixo para Ctrl+a (mais fácil)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Barra de status com informações úteis
set -g status-bg colour235
set -g status-fg white
set -g status-left '#[fg=green]#S '
set -g status-right '#[fg=yellow]%H:%M #[fg=cyan]%d/%m/%Y'
# Ativar mouse (redimensionar painéis, selecionar janelas)
set -g mouse on
# Recarregar configuração
bind r source-file ~/.tmux.conf \; display "Config recarregada!"
Para recarregar a configuração sem reiniciar: Ctrl+b :source-file ~/.tmux.conf.
Com o TPM (Tmux Plugin Manager), você adiciona plugins poderosos:
# No ~/.tmux.conf:
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
run '~/.tmux/plugins/tpm/tpm'
- tmux-resurrect: salva e restaura sessões completas (incluindo painéis, diretórios, programas rodando)
- tmux-continuum: salva automaticamente a cada 15 minutos
7. Casos de uso práticos no dia a dia
Manter servidor de desenvolvimento rodando:
ssh usuario@servidor
tmux new -s dev
cd /var/www/projeto
npm run dev
# Ctrl+b d — agora pode fechar o SSH
# Horas depois: ssh e tmux attach
Múltiplos projetos simultâneos:
tmux new -s frontend
tmux new -s backend
tmux new -s database
# Navegue entre eles com Ctrl+b s
Compartilhar sessão com colega (mesmo usuário Unix):
# No servidor, ambos os usuários executam:
tmux new-session -s compartilhada
# O colega anexa:
tmux attach-session -t compartilhada
# Ambos veem e controlam a mesma sessão em tempo real
Recuperar sessão após reboot (com tmux-resurrect instalado):
# Salvar estado
Ctrl+b Ctrl+s
# Após reboot
tmux
Ctrl+b Ctrl+r # Restaura tudo
8. Dicas finais e solução de problemas
Quando o tmux congela: Se um processo interno travar todo o tmux, envie um sinal para o processo pai:
# Descubra o PID do tmux
ps aux | grep tmux
# Envie o sinal de reset
kill -SIGUSR1 <PID>
Sincronizar painéis para comandos simultâneos: Útil para executar o mesmo comando em múltiplos servidores:
Ctrl+b :setw synchronize-panes on
# Agora tudo que digitar em um painel replica nos outros
# Para desligar: setw synchronize-panes off
Boas práticas:
- Sempre nomeie sessões de forma descritiva (projeto-api, deploy-prod, logs-nginx)
- Use atalhos consistentes — memorize Ctrl+b c (janela), Ctrl+b % (split), Ctrl+b d (desanexar)
- Configure o tmux-resurrect para backups automáticos
Checklist para nunca mais perder uma sessão SSH:
1. ✅ Instale o tmux no servidor
2. ✅ Configure ~/.tmux.conf com histórico e mouse
3. ✅ Sempre inicie processos longos dentro de uma sessão tmux
4. ✅ Desanexe com Ctrl+b d antes de fechar o SSH
5. ✅ Instale tmux-resurrect para proteção contra reboots
6. ✅ Nomeie sessões para organização
Com o tmux, você transforma sessões SSH frágeis em ambientes de trabalho robustos e persistentes. Adeus, frustração de conexões perdidas.
Referências
- Documentação oficial do tmux (GitHub) — Repositório oficial com manual completo, exemplos de configuração e lista de atalhos.
- Tmux Plugin Manager (tpm) — Gerenciador de plugins para tmux, essencial para instalar tmux-resurrect e tmux-continuum.
- Tmux Resurrect — Plugin que salva e restaura sessões completas do tmux, incluindo painéis, diretórios e programas.
- Tmux Continuum — Plugin que automatiza salvamentos periódicos do estado do tmux, protegendo contra perda de sessão.
- Guia prático de tmux (DigitalOcean) — Tutorial passo a passo para iniciantes, com exemplos de instalação e comandos básicos.
- Tmux Cheat Sheet (tmuxcheatsheet.com) — Referência visual rápida com todos os atalhos e comandos do tmux organizados por categoria.