Estação de Trabalho como Código (Parte 3.5): Gerenciando Múltiplas Conexões SSH com Tmux
Aprenda a usar multi-ssh-tmux, um script poderoso para gerenciar múltiplas conexões SSH simultâneas em uma única sessão tmux. Este tutorial complementar mostra como instalar, configurar e usar a ferramenta para automatizar tarefas em múltiplos servidores com sincronização de comandos.
Tutorial Anterior: Estação de Trabalho como Código (Parte 3): Configurando Vim e Tmux
Introdução
Na Parte 3, aprendemos a configurar o Tmux como um multiplexador de terminal poderoso. Agora vamos explorar um caso de uso avançado: gerenciar múltiplas conexões SSH simultâneas em uma única sessão tmux.
multi-ssh-tmux é um script Bash que automatiza a criação de sessões tmux com múltiplos hosts SSH, oferecendo sincronização de comandos, diferentes layouts e gerenciamento flexível. É perfeito para SysAdmins que precisam executar comandos em múltiplos servidores simultaneamente.
Observação: Esta é uma parte complementar e opcional. Se você preferir gerenciar SSH manualmente, pode pular para a Parte 4. No entanto, recomendamos usar multi-ssh-tmux para melhorar sua produtividade ao trabalhar com infraestrutura.
Objetivos desta Parte
- Entender o que é multi-ssh-tmux e seus benefícios
- Instalar o script multi-ssh-tmux no seu ambiente
- Usar multi-ssh-tmux para criar sessões com múltiplos hosts
- Ativar modo sincronizado para executar comandos em todos os painéis
- Explorar diferentes layouts de tmux
- Ler hosts de um arquivo de configuração
- Executar comandos iniciais em múltiplos hosts
- Resolver problemas comuns com troubleshooting
Pré-requisitos
- Conclusão da Parte 3 desta série
- Tmux configurado (foi configurado na Parte 3)
- SSH configurado (será configurado na Parte 4, mas você pode usar agora)
- Acesso a múltiplos servidores para testar (opcional)
A quem se destina
Este tutorial é ideal para:
- SysAdmins: Que gerenciam múltiplos servidores
- DevOps Engineers: Que precisam executar tarefas em múltiplos hosts
- Desenvolvedores: Que trabalham com múltiplas máquinas
- Profissionais de TI: Que querem automatizar tarefas repetitivas
Pré-conhecimento: Conhecimento básico de Tmux (coberto na Parte 3) é recomendado.
Tempo Estimado
⏱ 25-35 minutos
Isso inclui:
- Leitura e compreensão: ~8 min
- Instalação: ~5 min
- Testes e exploração: ~10-15 min
- Troubleshooting (se necessário): ~5 min
Dica Útil: Se você quiser apenas instalar e usar, pode fazer em 15 minutos. Mas recomendamos ler e entender cada seção.
O que é multi-ssh-tmux?
multi-ssh-tmux é um script Bash que oferece:
- Criar sessões tmux com múltiplas conexões SSH
- Sincronizar comandos em todos os painéis simultaneamente
- Diferentes layouts de tmux (tiled, even-vertical, etc)
- Ler hosts de um arquivo de configuração
- Executar comandos iniciais em todos os hosts
- Suporte a opções SSH customizadas
- Validação completa de entrada
- Feedback claro e profissional
Por que usar multi-ssh-tmux?
| Aspecto | Benefício |
|---|---|
| Automação | Crie sessões com múltiplos hosts em um comando |
| Sincronização | Execute comandos em todos os hosts simultaneamente |
| Organização | Diferentes layouts para diferentes necessidades |
| Flexibilidade | Suporte a arquivos de hosts e opções SSH |
| Produtividade | Reduza tempo em tarefas repetitivas |
| Profissional | Cores, formatação e feedback claro |
| Modular | Integrado com workspace-as-code |
Casos de Uso
- Monitorar múltiplos servidores em tempo real
- Executar atualizações em múltiplos hosts
- Coletar informações de múltiplos servidores
- Gerenciar clusters de máquinas
- Automatizar tarefas de infraestrutura
Instalando o multi-ssh-tmux
Passo 1: Criar o Diretório
1
2
3
4
5
6
7
8
# Crie o diretório para o script
$ mkdir -p ~/workspace-as-code/scripts/multi-ssh-tmux
# Verifique se foi criado
$ ls -la ~/workspace-as-code/scripts/
# Você deve ver:
# drwxr-xr-x multi-ssh-tmux
Passo 2: Copiar o Script
Copie o script multi-ssh-tmux para o diretório:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
$ cat > ~/workspace-as-code/scripts/multi-ssh-tmux/multi-ssh-tmux << 'EOF'
#!/bin/bash
################################################################################
# multi-ssh-tmux - Gerenciador de Conexões SSH Múltiplas com tmux
################################################################################
#
# Descrição:
# Script para criar sessões tmux com múltiplas conexões SSH simultâneas.
# Oferece sincronização de comandos, diferentes layouts e gerenciamento
# flexível de hosts através de linha de comando ou arquivo.
#
# Dependências:
# - bash (versão 4.0+)
# - tmux (versão 2.0+)
# - ssh (OpenSSH)
#
# Uso:
# multi-ssh-tmux [OPÇÕES] [USUARIO@]HOST1 [[USUARIO@]HOST2 ...]
#
# Exemplos:
# multi-ssh-tmux --sync user@host1 host2 host3
# multi-ssh-tmux -s my-session -u admin host1 host2
# multi-ssh-tmux -l even-vertical -f hosts.txt
# multi-ssh-tmux -c "uptime" host1 host2 host3
#
# Autor: Gean Martins (adaptado para workspace-as-code)
# Versão: 2.0.0
# Data: 2026-02-19
#
################################################################################
set -euo pipefail
# ============================================================================
# Definições de Cores
# ============================================================================
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly CYAN='\033[0;36m'
readonly NC='\033[0m' # No Color
# ============================================================================
# Constantes Globais
# ============================================================================
readonly MAX_HOSTS=32
readonly VALID_LAYOUTS=("tiled" "even-horizontal" "even-vertical" "main-horizontal" "main-vertical")
# ============================================================================
# Funções de Log
# ============================================================================
_info() {
echo -e "${BLUE}[INFO]${NC} $*"
}
_warn() {
echo -e "${YELLOW}[WARN]${NC} $*" >&2
}
_error() {
echo -e "${RED}[ERRO]${NC} $*" >&2
}
_success() {
echo -e "${GREEN}[SUCESSO]${NC} $*"
}
# ============================================================================
# Funções de Validação
# ============================================================================
_validar_host() {
local host="$1"
local hostname="${host##*@}"
if [[ ! "$hostname" =~ ^[a-zA-Z0-9][a-zA-Z0-9._-]*$ ]]; then
return 1
fi
if [ ${#hostname} -gt 253 ]; then
return 1
fi
return 0
}
_validar_opcao_ssh() {
local option="$1"
if [[ ! "$option" =~ ^-[a-zA-Z][a-zA-Z0-9]*= ]]; then
return 1
fi
return 0
}
_validar_layout() {
local layout="$1"
for valid_layout in "${VALID_LAYOUTS[@]}"; do
if [ "$layout" = "$valid_layout" ]; then
return 0
fi
done
return 1
}
# ============================================================================
# Funções Auxiliares
# ============================================================================
_escapar_para_tmux() {
local string="$1"
string="${string//\'/\'\\\'\'}"
echo "'$string'"
}
command_exists() {
command -v "$1" &>/dev/null
}
# ============================================================================
# Função de Ajuda
# ============================================================================
mostrar_ajuda() {
cat << 'HELP'
Uso: multi-ssh-tmux [OPÇÕES] [USUARIO@]HOST1 [[USUARIO@]HOST2 ...]
Opções:
--sync Ativa modo sincronizado (comandos replicados em todos os painéis)
-s, --session NOME Define um nome para a sessão tmux (padrão: multi-ssh-tmux)
-u, --user USUARIO Define um usuário padrão para hosts sem usuário
-o, --ssh-option OPT=VAL
Passa opções específicas para o SSH (ex: -StrictHostKeyChecking=no)
-l, --layout LAYOUT Define o layout tmux (padrão: tiled)
Layouts válidos: tiled, even-horizontal, even-vertical,
main-horizontal, main-vertical
-d, --detach Cria a sessão mas não anexa
-c, --command CMD Executa comando em todos os hosts após conexão
-f, --file ARQUIVO Lê hosts de um arquivo (um por linha, # para comentários)
--list Lista todas as sessões tmux existentes
-h, --help Mostra esta ajuda
Exemplos:
multi-ssh-tmux --sync user@host1 host2 host3
multi-ssh-tmux -s my-session -u admin -o StrictHostKeyChecking=no host1 host2
multi-ssh-tmux -l even-vertical host1 host2 host3
multi-ssh-tmux -c "uptime" host1 host2 host3
multi-ssh-tmux -f hosts.txt -l even-horizontal
multi-ssh-tmux --list
Variáveis de ambiente:
SSH_DEFAULT_USER Define o usuário padrão para conexões SSH (padrão: usuário atual)
Exemplos avançados:
multi-ssh-tmux -f hosts.txt -l even-vertical --sync
multi-ssh-tmux --sync -u admin -o StrictHostKeyChecking=no -o ConnectTimeout=5 host1 host2
multi-ssh-tmux -c "uptime && hostname" -s monitoring host1 host2 host3
Notas:
- Máximo de hosts: 32
- Se um host não contiver @, o usuário padrão será adicionado automaticamente
- Comentários em arquivos de hosts começam com #
- O modo sincronizado permite executar comandos em todos os painéis simultaneamente
HELP
}
# ============================================================================
# Função Principal
# ============================================================================
main() {
local sync_mode=false
local hosts=()
local session_name="multi-ssh-tmux"
local default_user="${SSH_DEFAULT_USER:-$USER}"
local ssh_options=()
local layout="tiled"
local attach=true
local initial_command=""
local hosts_file=""
# Processar argumentos
while [[ $# -gt 0 ]]; do
case $1 in
--sync)
sync_mode=true
shift
;;
-s|--session)
if [ -z "${2:-}" ]; then
_error "Opção $1 requer um valor"
return 1
fi
session_name="$2"
shift 2
;;
-u|--user)
if [ -z "${2:-}" ]; then
_error "Opção $1 requer um valor"
return 1
fi
default_user="$2"
shift 2
;;
-o|--ssh-option)
if [ -z "${2:-}" ]; then
_error "Opção $1 requer um valor"
return 1
fi
if ! _validar_opcao_ssh "$2"; then
_error "Opção SSH inválida: $2 (use formato: -ChaveOpcao=valor)"
return 1
fi
ssh_options+=("-$2")
shift 2
;;
-l|--layout)
if [ -z "${2:-}" ]; then
_error "Opção $1 requer um valor"
return 1
fi
if ! _validar_layout "$2"; then
_error "Layout inválido: $2"
_error "Layouts válidos: ${VALID_LAYOUTS[*]}"
return 1
fi
layout="$2"
shift 2
;;
-d|--detach)
attach=false
shift
;;
-c|--command)
if [ -z "${2:-}" ]; then
_error "Opção $1 requer um valor"
return 1
fi
initial_command="$2"
shift 2
;;
-f|--file)
if [ -z "${2:-}" ]; then
_error "Opção $1 requer um valor"
return 1
fi
hosts_file="$2"
shift 2
;;
--list)
tmux list-sessions 2>/dev/null || _info "Nenhuma sessão tmux ativa"
return 0
;;
-h|--help)
mostrar_ajuda
return 0
;;
-*)
_error "Opção desconhecida: $1"
mostrar_ajuda
return 1
;;
*)
if [[ "$1" != *"@"* ]]; then
hosts+=("${default_user}@$1")
else
hosts+=("$1")
fi
shift
;;
esac
done
# Processar arquivo de hosts se fornecido
if [ -n "$hosts_file" ]; then
if [ ! -f "$hosts_file" ]; then
_error "Arquivo não encontrado: $hosts_file"
return 1
fi
while IFS= read -r host; do
[ -z "$host" ] && continue
[[ "$host" =~ ^[[:space:]]*# ]] && continue
host=$(echo "$host" | xargs)
if [[ "$host" != *"@"* ]]; then
hosts+=("${default_user}@$host")
else
hosts+=("$host")
fi
done < "$hosts_file"
fi
# Validação dos hosts
if [ ${#hosts[@]} -eq 0 ]; then
_error "Nenhum host especificado"
_error "Use -h ou --help para ajuda"
return 1
fi
# Validação de limite máximo de hosts
if [ ${#hosts[@]} -gt $MAX_HOSTS ]; then
_error "Máximo de hosts permitido: $MAX_HOSTS (você especificou ${#hosts[@]})"
return 1
fi
# Validar todos os hosts antes de começar
for host in "${hosts[@]}"; do
if ! _validar_host "$host"; then
_error "Host inválido: $host"
return 1
fi
done
# Verificar se tmux está instalado
if ! command_exists tmux; then
_error "tmux não está instalado"
return 1
fi
# Verificar se SSH está instalado
if ! command_exists ssh; then
_error "ssh não está instalado"
return 1
fi
# Criar nova sessão tmux
_info "Criando sessão tmux: $session_name"
tmux new-session -d -s "$session_name" -x 200 -y 50
# Criar janela principal
local window=0
tmux rename-window -t "$session_name" "ssh"
# Criar painéis para cada host
for i in "${!hosts[@]}"; do
if [ $i -eq 0 ]; then
# Primeiro host usa o painel padrão
local pane_target="$session_name:$window.0"
else
# Criar novo painel
tmux split-window -t "$session_name:$window" -h
local pane_target="$session_name:$window.$i"
fi
# Construir comando SSH
local ssh_cmd="ssh"
for opt in "${ssh_options[@]}"; do
ssh_cmd="$ssh_cmd $opt"
done
ssh_cmd="$ssh_cmd ${hosts[$i]}"
# Enviar comando SSH para o painel
tmux send-keys -t "$pane_target" "$ssh_cmd" Enter
done
# Aplicar layout
tmux select-layout -t "$session_name" "$layout"
# Ativar modo sincronizado se solicitado
if [ "$sync_mode" = true ]; then
tmux set-window-option -t "$session_name" synchronize-panes on
_info "Modo sincronizado ativado"
fi
# Executar comando inicial se fornecido
if [ -n "$initial_command" ]; then
sleep 1
local escaped_cmd=$(_escapar_para_tmux "$initial_command")
tmux send-keys -t "$session_name" "$escaped_cmd" Enter
fi
# Anexar ou desanexar
if [ "$attach" = true ]; then
_success "Sessão criada e anexada: $session_name"
tmux attach-session -t "$session_name"
else
_success "Sessão criada (desanexada): $session_name"
_info "Para anexar, use: tmux attach-session -t $session_name"
fi
}
# Executar programa principal
main "$@"
EOF
# Dê permissão de execução
$ chmod +x ~/workspace-as-code/scripts/multi-ssh-tmux/multi-ssh-tmux
# Verifique se foi criado
$ ls -la ~/workspace-as-code/scripts/multi-ssh-tmux/
# Você deve ver:
# -rwxr-xr-x multi-ssh-tmux
Passo 3: Criar Link Simbólico
Para usar o script de qualquer lugar, crie um link simbólico em /usr/local/bin:
1
2
3
4
5
6
7
8
9
10
11
# Crie o link simbólico
$ sudo ln -s ~/workspace-as-code/scripts/multi-ssh-tmux/multi-ssh-tmux /usr/local/bin/multi-ssh-tmux
# Verifique se foi criado
$ ls -la /usr/local/bin/multi-ssh-tmux
# Você deve ver:
# lrwxrwxrwx multi-ssh-tmux -> /home/user/workspace-as-code/scripts/multi-ssh-tmux/multi-ssh-tmux
# Teste se funciona
$ multi-ssh-tmux --help
Informação: O link simbólico permite chamar
multi-ssh-tmuxde qualquer diretório sem precisar do caminho completo.
Usando o multi-ssh-tmux
Sintaxe Básica
1
2
3
4
5
6
7
8
# Forma simples
$ multi-ssh-tmux host1 host2 host3
# Com usuário
$ multi-ssh-tmux user@host1 user@host2 host3
# Com opções
$ multi-ssh-tmux --sync -s my-session host1 host2 host3
Opções Principais
| Opção | Descrição |
|---|---|
--sync | Ativa modo sincronizado (comandos em todos os painéis) |
-s, --session NOME | Define nome da sessão tmux |
-u, --user USUARIO | Define usuário padrão |
-l, --layout LAYOUT | Define layout tmux |
-c, --command CMD | Executa comando após conexão |
-f, --file ARQUIVO | Lê hosts de arquivo |
-d, --detach | Cria sessão sem anexar |
--list | Lista sessões tmux |
-h, --help | Mostra ajuda |
Layouts Disponíveis
| Layout | Descrição |
|---|---|
tiled | Divide igualmente (padrão) |
even-horizontal | Painéis lado a lado |
even-vertical | Painéis um sobre o outro |
main-horizontal | Um painel grande em cima |
main-vertical | Um painel grande à esquerda |
Exemplos Práticos
Exemplo 1: Conectar a Múltiplos Hosts
1
2
3
4
# Conectar a 3 hosts com layout padrão
$ multi-ssh-tmux host1 host2 host3
# Você verá 3 painéis com conexões SSH abertas
Exemplo 2: Modo Sincronizado
1
2
3
4
5
6
# Ativar modo sincronizado
$ multi-ssh-tmux --sync host1 host2 host3
# Agora qualquer comando digitado vai para todos os painéis
# Digite: uptime
# Resultado: uptime executado em todos os 3 hosts simultaneamente
Exemplo 3: Layout Customizado
1
2
3
4
5
# Usar layout even-vertical (painéis um sobre o outro)
$ multi-ssh-tmux -l even-vertical host1 host2 host3
# Usar layout main-vertical (um grande à esquerda)
$ multi-ssh-tmux -l main-vertical host1 host2 host3 host4
Exemplo 4: Executar Comando Inicial
1
2
3
4
# Executar comando após conectar
$ multi-ssh-tmux -c "uptime" host1 host2 host3
# Resultado: uptime executado automaticamente em todos os hosts
Exemplo 5: Ler Hosts de Arquivo
Primeiro, crie um arquivo de hosts:
1
2
3
4
5
6
7
8
9
10
11
12
$ cat > ~/hosts.txt << 'EOF'
# Servidores de produção
prod-server-1
prod-server-2
# Servidores de staging
staging-server-1
staging-server-2
EOF
# Usar o arquivo
$ multi-ssh-tmux -f ~/hosts.txt --sync
Exemplo 6: Opções SSH Customizadas
1
2
3
4
5
# Desabilitar verificação de chave de host
$ multi-ssh-tmux -o StrictHostKeyChecking=no host1 host2
# Múltiplas opções
$ multi-ssh-tmux -o StrictHostKeyChecking=no -o ConnectTimeout=5 host1 host2
Exemplo 7: Sessão Nomeada e Desanexada
1
2
3
4
5
6
# Criar sessão nomeada e desanexada
$ multi-ssh-tmux -s monitoring -d host1 host2 host3
# Resultado: Sessão criada em background
# Para anexar depois:
$ tmux attach-session -t monitoring
Exemplo 8: Caso de Uso Real - Monitorar Cluster
1
2
3
4
5
6
# Criar sessão para monitorar cluster
$ multi-ssh-tmux -s cluster-monitor -l even-vertical \
-c "watch -n 1 'uptime && free -h'" \
server1 server2 server3 server4
# Resultado: Cada painel mostra uptime e memória em tempo real
Entendendo o Script
Seção 1: Inicialização
1
set -euo pipefail
Garante que o script falhe se houver erro, variável indefinida ou falha em pipe.
Seção 2: Cores e Formatação
1
2
3
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
# ... etc
Define cores para tornar a saída mais legível.
Seção 3: Funções de Validação
1
2
3
_validar_host() # Valida formato de host
_validar_layout() # Valida layout tmux
_validar_opcao_ssh() # Valida opções SSH
Garantem que entrada é válida antes de processar.
Seção 4: Processamento de Argumentos
1
2
3
4
5
6
7
8
while [[ $# -gt 0 ]]; do
case $1 in
--sync)
sync_mode=true
;;
# ... etc
esac
done
Processa opções de linha de comando.
Seção 5: Criação de Sessão Tmux
1
2
3
tmux new-session -d -s "$session_name"
tmux split-window -t "$session_name"
tmux send-keys -t "$pane_target" "$ssh_cmd" Enter
Cria sessão, painéis e envia comandos SSH.
Troubleshooting
Erro: “tmux not found”
Problema: tmux não está instalado.
Solução:
1
2
3
4
$ sudo apt install tmux
# Verifique
$ tmux -V
Erro: “ssh not found”
Problema: SSH não está instalado.
Solução:
1
2
3
4
$ sudo apt install openssh-client
# Verifique
$ ssh -V
Erro: “Invalid host”
Problema: Você digitou um hostname inválido.
Solução:
1
2
3
4
5
# Hostnames válidos: server1, prod-server, 192.168.1.1
# Hostnames inválidos: server@1, server#1
# Use hostnames válidos
$ multi-ssh-tmux server1 server2
Erro: “Maximum hosts exceeded”
Problema: Você tentou conectar a mais de 32 hosts.
Solução:
1
2
3
4
# Máximo de hosts: 32
# Divida em múltiplas sessões
$ multi-ssh-tmux -s session1 host1 host2 host3
$ multi-ssh-tmux -s session2 host4 host5 host6
Conexão não funciona
Problema: SSH não consegue conectar aos hosts.
Solução:
1
2
3
4
5
6
7
8
9
10
11
# Teste conexão manual
$ ssh user@host1
# Se falhar, verifique:
# 1. Host está online
# 2. SSH está configurado corretamente
# 3. Chaves SSH estão corretas
# 4. Firewall permite SSH
# Use opções SSH para debug
$ multi-ssh-tmux -o StrictHostKeyChecking=no host1
Modo sincronizado não funciona
Problema: Comandos não são replicados em todos os painéis.
Solução:
1
2
3
4
5
6
7
8
# Verifique se sincronização está ativada
$ tmux show-window-options -t session-name synchronize-panes
# Se estiver off, ative manualmente
$ tmux set-window-option -t session-name synchronize-panes on
# Ou use flag --sync
$ multi-ssh-tmux --sync host1 host2 host3
Arquivo de hosts não encontrado
Problema: Arquivo especificado não existe.
Solução:
1
2
3
4
5
6
7
8
9
10
11
12
# Verifique se arquivo existe
$ ls -la ~/hosts.txt
# Se não existir, crie
$ cat > ~/hosts.txt << 'EOF'
host1
host2
host3
EOF
# Use o arquivo
$ multi-ssh-tmux -f ~/hosts.txt
Dicas e Boas Práticas
Dica 1: Use Nomes Descritivos de Sessão
1
2
3
4
5
6
# Bom
$ multi-ssh-tmux -s prod-monitoring host1 host2 host3
$ multi-ssh-tmux -s staging-deploy host4 host5
# Ruim
$ multi-ssh-tmux host1 host2 host3
Dica 2: Organize Hosts em Arquivos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Crie arquivo para cada ambiente
$ cat > ~/prod-servers.txt << 'EOF'
prod-web-1
prod-web-2
prod-db-1
EOF
$ cat > ~/staging-servers.txt << 'EOF'
staging-web-1
staging-db-1
EOF
# Use facilmente
$ multi-ssh-tmux -s prod -f ~/prod-servers.txt
$ multi-ssh-tmux -s staging -f ~/staging-servers.txt
Dica 3: Combine com Comandos Úteis
1
2
3
4
5
6
7
8
# Monitorar recursos
$ multi-ssh-tmux --sync -c "watch -n 1 free -h" host1 host2
# Verificar status de serviço
$ multi-ssh-tmux --sync -c "systemctl status nginx" host1 host2
# Coletar logs
$ multi-ssh-tmux --sync -c "tail -f /var/log/syslog" host1 host2
Dica 4: Use Variáveis de Ambiente
1
2
3
4
5
# Definir usuário padrão
$ export SSH_DEFAULT_USER=admin
$ multi-ssh-tmux host1 host2 host3
# Resultado: Conecta como admin@host1, admin@host2, etc
Dica 5: Navegue Entre Painéis
Dentro de uma sessão tmux:
1
2
3
4
5
# Navegar entre painéis
Ctrl+B Seta # Navegar para painel adjacente
Ctrl+B Z # Zoom em um painel
Ctrl+B Espaço # Trocar layout
Ctrl+B S # Sincronizar painéis (se configurado)
Dica 6: Salve Sessões Frequentes
1
2
3
4
5
6
7
# Crie alias para sessões frequentes
$ alias prod-monitor='multi-ssh-tmux -s prod-monitor -l even-vertical -f ~/prod-servers.txt'
$ alias staging-monitor='multi-ssh-tmux -s staging -f ~/staging-servers.txt'
# Agora use facilmente
$ prod-monitor
$ staging-monitor
Integrando com Seu Fluxo de Trabalho
Adicionar multi-ssh-tmux ao Git
1
2
3
4
5
# Adicione o script ao repositório
$ cd ~/workspace-as-code
$ git add scripts/multi-ssh-tmux/
$ git commit -m "feat: add multi-ssh-tmux for managing multiple ssh sessions"
$ git push origin main
Criar Arquivo de Hosts Versionado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Crie diretório para hosts
$ mkdir -p ~/workspace-as-code/hosts
# Crie arquivos de hosts
$ cat > ~/workspace-as-code/hosts/production.txt << 'EOF'
prod-web-1
prod-web-2
prod-db-1
EOF
# Versione
$ git add hosts/
$ git commit -m "docs: add host configurations"
$ git push origin main
Criar Scripts de Automação
1
2
3
4
5
6
7
8
# Crie script para atualizar todos os servidores
$ cat > ~/workspace-as-code/scripts/update-all.sh << 'EOF'
#!/bin/bash
multi-ssh-tmux --sync -c "sudo apt update && sudo apt upgrade -y" \
-f ~/workspace-as-code/hosts/production.txt
EOF
$ chmod +x ~/workspace-as-code/scripts/update-all.sh
Conclusão
O multi-ssh-tmux é uma ferramenta poderosa que transforma como você gerencia múltiplos servidores. Ele oferece:
✓ Automação de criação de sessões tmux ✓ Sincronização de comandos em múltiplos hosts ✓ Diferentes layouts para diferentes necessidades ✓ Suporte a arquivos de hosts ✓ Opções SSH customizadas ✓ Validação completa de entrada ✓ Integração com workspace-as-code
O Que Você Alcançou
✓ Instalação do multi-ssh-tmux ✓ Criação de link simbólico para acesso global ✓ Compreensão de como o script funciona ✓ Capacidade de criar sessões com múltiplos hosts ✓ Uso de modo sincronizado ✓ Exploração de diferentes layouts ✓ Integração com seu fluxo de trabalho
Próximos Passos Imediatos
- Teste o multi-ssh-tmux:
1
$ multi-ssh-tmux --help
- Crie seus primeiros hosts:
1 2 3 4
$ cat > ~/test-hosts.txt << 'EOF' localhost EOF $ multi-ssh-tmux -f ~/test-hosts.txt
- Explore layouts:
1
$ multi-ssh-tmux -l even-vertical localhost localhost
- Commit suas mudanças:
1 2 3 4
$ cd ~/workspace-as-code $ git add scripts/multi-ssh-tmux/ $ git commit -m "feat: add multi-ssh-tmux for managing multiple ssh sessions" $ git push origin main
Próximo Tutorial
Com Tmux e SSH avançados configurados, o próximo passo é aprender a gerenciar configurações SSH de forma organizada e profissional.
Recursos Adicionais
- Documentação Oficial do Tmux
- Tmux Cheat Sheet
- SSH Documentation
- Bash Scripting Guide
- Advanced Tmux Usage
Fim da Parte 3.5
Próxima: Organizando Acessos com SSH Config