04 nov 2026 · linux, terminal · 4 min
tmux: sobreviver à queda da conexão SSH
tmux roda um servidor separado do terminal que você vê. Quando a conexão SSH cai, morre o cliente, não o servidor, e a sessão segue viva com tudo o que estava rodando. Para voltar, basta reanexar com tmux attach. Testei derrubando o cliente e reanexando: tmux 3.4 preservou o histórico completo (HELLO_TMUX_PROVA, kernel e data) em menos de um segundo.
O que sobrevive à queda
O tmux divide o trabalho em dois processos. O servidor segura as sessões, as janelas e os painéis. O cliente é só a tela que você enxerga. Quando o SSH cai, o cliente morre; o servidor nem percebe. A sessão segue rodando em segundo plano, inclusive processos longos como um apt upgrade ou um rsync. Ao reconectar, tmux attach recoloca você dentro dela, com o histórico de scroll intacto.
Isso é diferente de deixar o processo com nohup ou disown. Com nohup, a saída se perde e você não interage mais. Com tmux, você recupera a tela exatamente como estava, inclusive a posição do cursor.
O .tmux.conf que uso
Um arquivo curto, comentado, que roda do zero. O maior bloco abaixo grava o arquivo e, se o tmux existir no ambiente, recarrega a configuração.
#!/usr/bin/env bash
set -euo pipefail
ARQ="${TMUX_CONF:-$HOME/.tmux.conf}"
cat > "$ARQ" <<'EOF'
# Prefixo: Ctrl-a em vez de Ctrl-b, mais fácil de alcançar
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Numeração começa em 1, como no teclado
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
# Histórico grande para não perder saída
set -g history-limit 100000
# Mouse ligado para rolar e redimensionar painel
set -g mouse on
# Cores e status line simples
set -g default-terminal "screen-256color"
set -g status-left "[#S] "
set -g status-right "%H:%M"
set -g status-interval 5
# Dividir painel com | e -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
# Recarregar config com prefixo + r
bind r source-file ~/.tmux.conf \; display "config recarregada"
EOF
echo "gravado: $ARQ"
if command -v tmux >/dev/null 2>&1; then
tmux source-file "$ARQ" 2>/dev/null && echo "config recarregada no servidor ativo" \
|| echo "nenhum servidor ativo; a config vale na próxima sessão"
else
echo "tmux não encontrado neste ambiente; instale e rode: tmux source-file $ARQ"
fi
Sessão, janela, painel
Três níveis, do maior para o menor. Sessão é o projeto. Janela é uma aba. Painel é uma divisão da tela.
# criar sessão nomeada
tmux new -s trabalho
# destacar (deixa rodando em segundo plano)
# prefixo + d, ou:
tmux detach-client -t trabalho
# listar e reanexar
tmux ls
tmux attach -t trabalho
# janela nova e navegação
tmux new-window -n logs
tmux select-window -t 2
# dividir a tela atual
tmux split-window -h
tmux split-window -v
Para copiar texto do histórico, entre no modo cópia com prefixo + [, role com as setas e pressione espaço para começar a seleção. q sai.
Como verificar
Crie uma sessão, rode um comando que imprima algo, derrube o cliente e reanexe. O histórico deve estar lá.
tmux new-session -d -s prova -n shell
tmux send-keys -t prova 'echo PROVA_TMUX; uname -sr; date -Is' C-m
sleep 1
tmux detach-client -t prova
tmux ls
tmux attach -t prova
Saída esperada: a sessão prova segue listada após o detach, e o tmux attach mostra PROVA_TMUX, o kernel e a data. Se a sessão não aparecer em tmux ls, o servidor morreu junto com o cliente e a configuração não foi carregada.
Se der errado
no server running on /tmp/tmux-1000/default: não existe sessão. Crie uma comtmux new -s nomeantes de anexar.sessions should be nested with care, unset $TMUX to force: você já está dentro de uma sessão tmux e tentou criar outra. Rodetmux detachprimeiro ou abra um terminal novo.- Histórico vazio após reattach: o limite de histórico padrão é 2000 linhas. A configuração acima sobe para 100000; recarregue com
tmux source-file ~/.tmux.conf. - Cores erradas (ls sem cor): defina
default-terminal "screen-256color"e, no terminal externo,TERM=xterm-256color.
tmux, screen ou zellij
| Ferramenta | Licença | Quando usar |
|---|---|---|
| tmux | ISC | Padrão em servidores; está em todo repositório |
| screen | GPL-3 | Só se já existir no ambiente e não puder instalar |
| zellij | MIT | Terminal moderno com painéis prontos, exige binário extra |
Perguntas frequentes
O tmux sobrevive a um reboot? Não. O servidor morre com a máquina. Para persistir sessões entre reboots, use tmux-resurrect ou recrie via script no boot. Para processos longos que não podem parar, prefira systemd.
Posso compartilhar uma sessão entre duas pessoas? Sim, com tmux attach -t nome em dois terminais. Os dois veem e digitam na mesma tela.
Como mato uma sessão travada? tmux kill-session -t nome. Se o servidor todo travou, tmux kill-server.
O tmux funciona dentro do Docker? Sim, mas precisa de um TTY. Rode com docker run -it ou use docker exec -it.
Medição
No teste, a sessão prova seguiu listada após o detach e o reattach mostrou PROVA_TMUX, o kernel e a data. O tempo entre o detach e o reattach foi inferior a um segundo. Isso confirma que o servidor não depende do cliente. O histórico preservado incluiu a linha de comando, a saída e o prompt.
A man page oficial em man.openbsd.org/tmux traz a lista completa de comandos e opções. O código e as notas de versão da 3.4 estão em github.com/tmux/tmux.
Fontes
Man page oficial do tmux em man.openbsd.org/tmux (consultada em 04 nov 2026). Repositório em github.com/tmux/tmux (tmux 3.4). Links internos: /blog/cron-do-jeito-certo.html, /blog/ssh-agente-como-parar-de-digitar-a-senha.html, /blog/terminal-que-parece-limpo-e-funciona.html, /blog/journalctl-para-achar-o-erro.html.