>_ josetilabs.com
← blog

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.

bash
#!/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.

bash
# 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á.

bash
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

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.

Terminal mostrando sessão tmux criada, cliente derrubado, reattach e o histórico anterior ainda visível
A sessão segue viva depois da queda do cliente e o histórico é recuperado no reattach.

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.

Leia também

// Por e-mail

Os textos publicados aqui também vão por e-mail. O envio ainda não começou: quem deixar o endereço agora entra na primeira lista.

Guardo só o seu e-mail, a data e o registro desta autorização. Sem cookies, sem rastreador e nada compartilhado com terceiros. Detalhes na política de privacidade.