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