Mengelola banyak server dalam satu tempat: broadcast command dengan tmux-cssh, tmux-cluster, dan synchronize-panes, lalu kolaborasi lewat shared session dengan attach read-write maupun read-only.

Di episode 18 sebelumnya kita membangun alur kerja remote yang tenang: session yang bertahan dari koneksi putus, mosh untuk jaringan lambat, dan bastion sebagai gerbang. Semua itu menyelesaikan masalah satu server. Sekarang saatnya menjawab pertanyaan yang jauh lebih liar: bagaimana jika yang harus dikelola bukan satu server, melainkan puluhan?
Di infrastruktur modern — cluster Kubernetes tanpa otomatisasi penuh, kumpulan server aplikasi, atau fleet device edge — pekerjaan rutin seperti mengecek versi paket, me-restart service, atau menyinkronkan konfigurasi harus dijalankan ke banyak mesin sekaligus. Melakukannya satu per satu lewat SSH bukan hanya lambat, tetapi juga rawan salah: perintah yang diketik dua puluh kali pasti akan berbeda di beberapa kali percobaan.
Episode ini membahas dua kemampuan besar tmux di level infrastruktur: broadcast command ke banyak server dalam satu gerakan, dan shared session untuk kolaborasi real-time — dari pair programming hingga observasi read-only. Semua contoh merujuk tmux 3.7b sebagai versi stabil terbaru.
Bayangkan kalian adalah petugas yang harus mengumumkan hal yang sama ke dua puluh ruangan. Mengetuk pintu satu per satu adalah pendekatan yang melelahkan dan tidak konsisten; megafon adalah jawabannya. Dalam konteks server, tmux adalah megafon tersebut — dengan beberapa cara untuk memakainya, tergantung seberapa besar kontrol yang kalian butuhkan.
| Tools | Bentuk | Kekuatan Utama |
|---|---|---|
tmux-cssh | Script Python, session tmux | Ringan, mendukung pola nama host, sinkronisasi bawaan |
tmux-cluster | Shell script tmc + plugin | Kompatibel dengan file config clusterssh, hierarki cluster |
| Pattern murni tmux | synchronize-panes | Tanpa tool tambahan, hanya bergantung tmux |
tmux-cssh adalah tool paling langsung: ia membuka satu session tmux berisi satu window per host, lalu menyinkronkan input ke semua window tersebut. Instalasinya hanya menyalin satu script ke PATH:
git clone https://github.com/peikk0/tmux-cssh.git
sudo cp tmux-cssh/tmux-cssh /usr/local/bin/Pemakaiannya menerima daftar host sebagai argumen, lengkap dengan dukungan brace expansion:
tmux-cssh -o '-p 2222 -l deploy' web-01 web-02 web-03Flag -o meneruskan argumen tambahan ke SSH (misalnya user dan port), dan -c membuat window baru di session yang sedang berjalan daripada membuat session baru. Karena sinkronisasi berbasis window, kalian bisa berpindah antar window untuk memeriksa output masing-masing host, lalu kembali ke mode broadcast. Tambahkan shortcut untuk toggle sinkronisasi di ~/.tmux.conf:
bind = setw synchronize-panestmux-cluster hadir untuk yang membutuhkan kelompok server terstruktur. Ia sepenuhnya kompatibel dengan format file config clusterssh — alat standar untuk administrasi cluster — sehingga kalian bisa mendefinisikan hierarki: cluster web berisi tiga host, cluster all berisi gabungan web dan db.
web fleet-web-01 fleet-web-02 fleet-web-03
db fleet-db-01 fleet-db-02
all web dbDengan file tersebut, menjalankan tmc web membuka session bernama cluster-web dengan satu window per host. Jika terpasang sebagai plugin TPM, prefix + C memunculkan prompt untuk memilih cluster secara interaktif. Keunggulan tmux-cluster dibandingkan alternatif lain: mendukung hierarki cluster dan menghasilkan command list dalam satu panggilan source-file, sehingga sangat cepat bahkan untuk puluhan host.
Sebelum menambah tool apa pun, ketahuilah bahwa tmux sudah menyediakan broadcast bawaan: window option synchronize-panes. Ketika aktif, input yang diketik di satu pane disalin ke semua pane di window yang sama. Pattern ini adalah fondasi yang dipakai tmux-cssh di balik layar.
Agar nyaman dipakai setiap hari, ikat toggle-nya dan beri indikator visual ketika mode sinkron aktif — indikator ini menyelamatkan kalian dari kesalahan broadcast yang tidak disengaja:
bind s setw synchronize-panes
setw -g window-status-current-format '#{?pane_synchronized,#[bg=red],}'
setw -g window-status-format '#{?pane_synchronized,#[bg=red],}'Cara pakainya: buat window, split menjadi satu pane per server, jalankan ssh di setiap pane, lalu tekan prefix + s untuk mengaktifkan sinkronisasi. Semua yang kalian ketik — termasuk password SSH jika otentikasi masih manual — diteruskan ke semua pane. Baris format di atas membuat nama window berubah latar menjadi merah selama sinkronisasi aktif, sehingga kalian tidak akan lupa bahwa mode broadcast sedang menyala.
Tmux bersifat multi-client: banyak terminal bisa menempel ke session yang sama secara bersamaan, dan semuanya melihat layar yang identik. Inilah mesin di balik kolaborasi real-time — jauh sebelum tools kolaborasi modern, engineer sudah pair programming lewat shared tmux session.
Percobaan paling sederhana: buka dua terminal, jalankan perintah berikut pada masing-masing:
tmux new -s pairKedua client kini melihat layar yang sama. Apa pun yang diketik client A langsung muncul di layar client B — dan sebaliknya. Ini adalah pair programming paling mentah dan paling langsung: tidak ada lag sinkronisasi, tidak ada layanan cloud, hanya dua terminal yang berbagi satu session.
Attach tanpa flag berarti mode read-write: kalian bisa mengetik dan mengeksekusi perintah. Tambahkan flag -r untuk attach read-only — client tetap melihat semua aktivitas, tetapi tidak bisa mengetik.
| Aspek | Read-write | Read-only |
|---|---|---|
| Mengetik di session | Bisa | Tidak bisa |
| Kasus pakai | Pair programming aktif | Review, mentoring, observasi |
| Risiko | Perintah bisa mengubah state | Aman bagi session |
tmux list-clients menampilkan semua client yang menempel beserta mode masing-masing — cara paling cepat untuk menyadari bahwa ada orang lain di session yang sama. Ini adalah kebiasaan yang sebaiknya selalu dijalankan sebelum bekerja di session bersama.
Secara default, tmux memisahkan akses berdasarkan user: server tmux membuat socket di /tmp/tmux-<uid>/default, dan hanya user dengan uid yang sama yang bisa attach. Ini berarti shared session antar rekan satu akun (misalnya user deploy bersama) sudah berjalan tanpa konfigurasi tambahan — cukup bagikan nama sessionnya.
Untuk berbagi lintas user — misalnya antara user ops dan user dev — socket harus diatur agar bisa diakses oleh keduanya. Salah satu caranya adalah memulai server dengan socket path khusus dan mengatur permission grup:
tmux -S /tmp/tmux-shared new -s shared
chgrp ops /tmp/tmux-shared
chmod 660 /tmp/tmux-sharedUser lain dalam grup ops kemudian bisa attach dengan tmux -S /tmp/tmux-shared attach. Perhatikan bahwa ini adalah aksi yang sangat permisif: setiap orang yang bisa membaca socket juga bisa mengirim perintah ke session tersebut.
Caution
Membuka permission socket berarti siapa pun yang attach — dalam mode read-write — bisa mengeksekusi perintah di dalam session, termasuk tmux kill-session. Jangan pernah berbagi session berisi pekerjaan sensitif (misalnya manipulasi database produksi) tanpa kesepakatan dan komunikasi yang jelas dengan rekan kalian.
Kombinasi broadcast dan shared session menghasilkan satu pattern yang sangat populer di tim operasi: session orkestrasi lokal, satu window per server, dan di dalam setiap window kalian masuk ke tmux yang berjalan di server tersebut. Pattern ini menggabungkan broadcast dari episode 18 (nested tmux) dengan sinkronisasi dari episode ini.
tmux new -s fleet -n web-01
tmux new-window -n web-02
tmux new-window -n web-03Di setiap window, SSH masuk ke server masing-masing lalu attach ke session tmux remote. Setelah semua window terhubung, aktifkan prefix + s — dan sekarang input broadcast mengalir dari layar lokal, menembus lapisan tmux remote, hingga mengeksekusi di semua server secara serempak. Keunggulan pattern ini dibandingkan tmux-cssh: kalian tetap memegang kendali penuh atas tmux di setiap server, termasuk scrollback dan status bar milik masing-masing.
Tip
Saat broadcast melintasi lapisan tmux, ingat trik dari episode 18: untuk mengendalikan tmux di dalamnya, tekan prefix dua kali (send-prefix). Dengan kata lain, prefix + prefix meneruskan perintah ke lapisan remote, sedangkan prefix + s di lapisan lokal mengendalikan sinkronisasi broadcast itu sendiri.
systemctl stop — bisa menyebar ke semua server sekaligus. Selalu periksa daftar host sebelum broadcast, dan uji perintah di satu pane terlebih dahulu.synchronize-panes. Mode sinkron yang masih aktif akan meneruskan perintah lanjutan — termasuk yang bersifat pribadi — ke semua pane. Biasakan langsung menonaktifkan (prefix + s) setelah batch pekerjaan selesai, dan gunakan indikator warna dari bagian sebelumnya.tmux attach -t pair -r.vim di mode broadcast akan menampilkan layar yang kacau di semua pane dan input menjadi tidak terkendali. Editor hanya untuk kerja satu pane.tmux list-clients. Tanpa menyadari siapa yang terhubung, kalian bisa mengirim perintah rahasia atau merusak pekerjaan orang lain. Jadikan pengecekan client sebagai kebiasaan di session bersama.Episode ini membawa tmux dari alat pribadi menjadi alat tim dan infrastruktur. Kalian memahami tiga cara broadcast ke banyak server — tmux-cssh untuk adopsi cepat, tmux-cluster untuk cluster terstruktur, dan synchronize-panes sebagai fondasi murni tanpa tool tambahan. Kalian juga menguasai shared session untuk kolaborasi real-time, perbedaan attach read-write dan read-only, cara mengatur permission socket, serta pattern nested tmux untuk orkestrasi lintas lapisan.
Poin yang harus kalian bawa:
synchronize-panes adalah mesin broadcast bawaan tmux; pasangkan dengan indikator visual agar tidak terlupa.-r mengubah kolaborator aktif menjadi penonton — sesuai untuk review dan mentoring.Semakin banyak kendali yang kalian miliki, semakin besar pula tanggung jawabnya. Di episode 20 selanjutnya kita akan membahas security dan hardening best practice — mengunci session dengan lock-session, mengatur lock-after-time, menjaga secret agar tidak bocor ke environment, dan praktik aman menjalankan tmux di server produksi. Sampai jumpa di episode 20!