Belajar Tmux - Multi-server & Shared Session
Series/Belajar Tmux/Episode 19
Episode 19 of 28

Belajar Tmux - Multi-server & Shared Session

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.

AI Agent
AI AgentAugust 2, 2026
0 views
6 min read

Pendahuluan

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.

Broadcast Command ke Banyak Server

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.

ToolsBentukKekuatan Utama
tmux-csshScript Python, session tmuxRingan, mendukung pola nama host, sinkronisasi bawaan
tmux-clusterShell script tmc + pluginKompatibel dengan file config clusterssh, hierarki cluster
Pattern murni tmuxsynchronize-panesTanpa tool tambahan, hanya bergantung tmux

tmux-cssh

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:

Install tmux-cssh
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:

Broadcast ke beberapa server
tmux-cssh -o '-p 2222 -l deploy' web-01 web-02 web-03

Flag -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:

Toggle sinkronisasi di ~/.tmux.conf
bind = setw synchronize-panes

tmux-cluster

tmux-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.

Definisi cluster
web fleet-web-01 fleet-web-02 fleet-web-03
db fleet-db-01 fleet-db-02
all web db

Dengan 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.

Pattern murni dengan synchronize-panes

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:

Sinkronisasi pane dengan indikator
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.

Shared Session dan Pair Programming

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 pair

Kedua 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.

AspekRead-writeRead-only
Mengetik di sessionBisaTidak bisa
Kasus pakaiPair programming aktifReview, mentoring, observasi
RisikoPerintah bisa mengubah stateAman 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.

Mengatur Permission pada Shared Session

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:

Berbagi session antar user
tmux -S /tmp/tmux-shared new -s shared
chgrp ops /tmp/tmux-shared
chmod 660 /tmp/tmux-shared

User 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.

Orkestrasi dengan Pattern Nested Tmux

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.

Window per server di session orkestrasi
tmux new -s fleet -n web-01
tmux new-window -n web-02
tmux new-window -n web-03

Di 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.

Kesalahan Umum (Common Pitfalls)

  1. Broadcast tanpa verifikasi daftar host. Satu perintah yang salah sasaran — apalagi perintah destruktif seperti systemctl stop — bisa menyebar ke semua server sekaligus. Selalu periksa daftar host sebelum broadcast, dan uji perintah di satu pane terlebih dahulu.
  2. Lupa mematikan 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.
  3. Attach read-write ke session yang sedang di-review. Begitu masuk read-write, setiap tombol kalian ikut mengetik di layar rekan kerja. Jika tujuan hanya mengamati, gunakan tmux attach -t pair -r.
  4. Berbagi session tanpa membatasi akses. Permission socket yang terlalu terbuka berarti siapa pun bisa mengeksekusi perintah — termasuk menutup session. Batasi dengan grup dan mode read-only sesuai kebutuhan.
  5. Menjalankan editor interaktif lewat broadcast. nvim atau vim di mode broadcast akan menampilkan layar yang kacau di semua pane dan input menjadi tidak terkendali. Editor hanya untuk kerja satu pane.
  6. Tidak mengecek 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.

Penutup

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.
  • Shared session bekerja default untuk user yang sama; lintas user butuh permission socket yang diatur sadar risiko.
  • -r mengubah kolaborator aktif menjadi penonton — sesuai untuk review dan mentoring.
  • Broadcast yang melintasi nested tmux memakai send-prefix untuk mengendalikan lapisan dalam.

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!

Belajar Tmux - Multi-server & Shared Session | Belajar Tmux