MXterm Pro

Cara Mencegah SSH Timeout di MacBook (Keepalive di ~/.ssh/config)

Henry AGI
5 menit baca
An ssh config file with Host *, ServerAliveInterval 60 and ServerAliveCountMax 3, marked packet every 60 s and gives up at 180 s

Cara mencegah SSH timeout di MacBook: tambahkan ServerAliveInterval 60 dan ServerAliveCountMax 3 di bawah Host * pada ~/.ssh/config. SSH client di Mac Anda lalu mengirim paket keepalive kecil sebelum router Wi-Fi, firewall kantor, atau timer idle di server menutup koneksi. Namun koneksi tetap tidak akan bertahan saat Mac sleep atau Wi-Fi berganti. Di bawah ini Anda akan tahu mana dari empat jenis timeout yang sedang Anda alami.

Atur keepalive SSH global di ~/.ssh/config

Buka (atau buat) ~/.ssh/config, lalu tambahkan blok Host * dengan dua direktif: ServerAliveInterval 60 dan ServerAliveCountMax 3. Aplikasi terminal yang menjalankan shell Anda, termasuk MXterm Pro, memakai ssh yang ada di PATH, biasanya OpenSSH bawaan macOS.

Mulai sekarang client mengirim paket kosong "apakah Anda masih di sana" ke server setiap 60 detik. Jika tiga paket berturut-turut (180 detik) tidak dijawab, SSH menutup koneksi dengan rapi, bukan menggantung di socket yang sudah mati.

Letakkan catch-all Host * di bagian paling bawah file. OpenSSH memakai aturan "nilai pertama yang diperoleh yang menang" untuk setiap opsi. Jika Anda sudah punya blok Host khusus untuk server tertentu (jump host, atau server VPN kantor dengan setelan sendiri), blok Host * yang berada di atasnya sudah "mengambil" ServerAliveInterval sebelum blok khusus itu dibaca.

Interval 60 detik dengan 3 percobaan butuh hingga tiga menit untuk menyadari koneksi mati. Ini titik awal yang wajar. Jika firewall kantor atau Wi-Fi publik memangkas koneksi idle sekitar satu menit, turunkan ke ServerAliveInterval 30 dan ServerAliveCountMax 2. Koneksi putus terdeteksi dalam satu menit, bukan tiga, dengan harga satu paket kecil tambahan setiap 30 detik.

Untuk memastikan setelan ini bekerja, biarkan satu sesi idle lebih lama dari waktu yang dulu memutusnya, lalu periksa apakah sesi masih ada. FAQ di bawah menunjukkan cara melihat paket keepalive itu sendiri.

SSH client macOS sudah mengaktifkan TCPKeepAlive yes secara default, tetapi itu pemeriksaan di level TCP yang bisa memakan waktu hingga dua jam untuk menyadari socket yang benar-benar mati. Pemeriksaan itu tidak berguna melawan firewall atau perangkat NAT yang masih meneruskan paket tetapi sudah memutuskan bahwa koneksi idle Anda selesai. ServerAliveInterval bekerja di level protokol SSH, sehingga setelan inilah yang menyelesaikan masalah tersebut.

Panduan terkaitCara Mengelola Banyak Server SSH dan VM Cloud di Mac

Timeout mana yang sebenarnya Anda alami (dan mengapa MacBook lebih sering kena)

Tidak semua putus koneksi SSH punya penyebab yang sama, dan perbaikan yang tepat bergantung pada penyebabnya.

Timeout idle di firewall atau NAT: sesuatu di antara Anda dan server (firewall kantor, router rumah, gateway VPN) menganggap koneksi tanpa lalu lintas selama beberapa menit sudah mati, lalu membuang statusnya. ServerAliveInterval langsung menyelesaikan ini, selama nilainya lebih pendek dari jendela timeout perangkat tersebut.

Timeout idle di sisi server: sshd di server diatur untuk memutus client yang idle, atau login shell punya TMOUT sendiri. ServerAliveInterval di sisi lokal membantu untuk kasus sshd, karena client Anda tidak lagi terlihat idle dari sisi server.

Perubahan jaringan: berpindah jaringan Wi-Fi, masuk ke VPN, atau berpindah dari rumah ke hotspot mengubah IP Anda di tengah sesi. Koneksi TCP milik SSH tidak bisa bertahan dari itu, dan tidak ada setelan keepalive yang memperbaiki perubahan IP. Hanya protokol yang dirancang untuk itu (Mosh) yang bisa, dengan mengorbankan sebagian fitur terminal demi ketahanan koneksi.

Sleep: penyebab khusus MacBook. Saat layar MacBook ditutup atau Mac sleep, SSH client Anda berhenti berjalan, sehingga tidak ada paket keepalive yang keluar selama jeda itu. Saat Mac bangun, server sering sudah menyerah pada koneksi tersebut, dan SSH melaporkan timeout atau broken pipe.

Jika sebuah sesi harus bertahan saat layar ditutup, jalankan job di server di dalam tmux/screen agar job tidak peduli bahwa koneksi lokal Anda putus (selengkapnya di FAQ).

Perbaiki juga di sisi server, jika bisa

Jika Anda mengelola server tersebut, Anda juga bisa mencegah SSH timeout dari sisi server. Tambahkan ClientAliveInterval 60 dan ClientAliveCountMax 3 ke /etc/ssh/sshd_config, lalu restart sshd. Ini padanan setelan client di sisi server, dan mencegah server menjadi pihak yang memutus koneksi Anda.

Jika Anda tidak mengontrol server (shared host, VM milik klien, atau cloud box yang dikelola orang lain), Anda tidak buntu. ServerAliveInterval di ~/.ssh/config Anda sendiri bekerja secara independen, karena client Anda yang mengirim lalu lintas keepalive dan sshd di server tidak perlu ikut bekerja sama.

Apa yang terjadi di MXterm Pro saat sesi timeout

Setiap pane terminal di MXterm Pro adalah PTY sungguhan yang menjalankan login shell biasa Anda, dibangun di atas Tauri dengan portable-pty di Rust. Ini bukan tab browser yang berpura-pura menjadi terminal.

Koneksi SSH yang Anda buka di dalamnya memakai OpenSSH client yang sudah ada di Mac Anda. Di pane biasa, ssh membaca ~/.ssh/config Anda persis seperti di Terminal.app atau iTerm2, jadi baris keepalive di panduan ini berlaku tanpa perubahan.

Pane yang dibuka dari host tersimpan berbeda. MXterm Pro menjalankan ssh dengan -o ServerAliveInterval=30 -o ServerAliveCountMax=3 di command line, sehingga koneksi mati terdeteksi dalam sekitar 90 detik. OpenSSH memakai nilai pertama yang diperolehnya, dan opsi command line datang lebih dulu daripada file config. Karena itu, nilai ~/.ssh/config Anda untuk kedua opsi tersebut tidak berlaku di pane itu.

Apa yang Anda lihat saat sesi putus bergantung pada cara Anda membukanya. Jika Anda mengetik ssh sendiri di pane biasa, yang keluar adalah proses ssh, bukan shell di bawahnya. Anda kembali ke prompt lokal Mac di pane yang sama, dan semua yang sudah tercetak tetap ada di layar. Sambungkan ulang dengan mengetik perintahnya lagi atau menekan ↑.

Pane yang dibuka dari host tersimpan berperilaku lain. Pane itu menjalankan ssh secara langsung, jadi tidak ada shell untuk kembali. Untuk kode 255 yang biasanya muncul saat sesi putus, pane mencetak baris redup miliknya sendiri yang diawali SSH connection failed or dropped (exit 255) dan diakhiri press Enter to reconnect. Enter membuka koneksi lagi.

Untuk kode keluar selain itu, pane mencetak Disconnected (exit N) dan setelahnya press Enter to reconnect.

SSH Host Manager (⌘⇧H) membantu sebelum dan sesudah koneksi putus, bukan saat putusnya. Koneksi lewat host tersimpan memakai ulang multiplexing koneksi bawaan OpenSSH (ControlMaster=auto, ControlPersist=10m). Saat Anda membuka panel file SFTP untuk host yang sudah tersambung, panel itu memakai koneksi yang sama dan melewati handshake. Koneksi bersama tetap terbuka selama 10 menit setelah sesi terakhir di dalamnya ditutup. Info lebih lanjut tentang host tersimpan ada di dokumentasi SSH dan SFTP.

Koneksi bersama ditutup lebih cepat jika Anda mengubah setelan koneksi host tersimpan atau menghapus host-nya, dan panel file punya tombol Reset koneksi untuk server yang menolak login atau memaksa penggantian password.

Satu catatan paket bagi Anda yang mengelola lebih dari beberapa server: secara default paket Free menyimpan hingga 5 host SSH di manager itu, dan paket Pro berbayar menghapus batas tersebut.

MXterm Pro vs iTerm2, Warp, Termius, dan MobaXterm untuk sesi SSH yang panjang

Termius mendukung Mosh, yang bertahan saat IP berubah dan saat sleep/wake, sesuatu yang secara struktur tidak bisa dilakukan SSH biasa. Untuk perbandingan lengkap, lihat SSH client terbaik untuk Mac.

MXterm Pro menjalankan beberapa sesi SSH sekaligus AI coding agent (Claude Code, Codex, Gemini CLI) berdampingan dalam satu workspace. Dengan isolasi worktree dicentang di composer tab baru (nonaktif secara default, hanya untuk repo git), setiap pane agent mendapat git worktree sendiri, yang mengurangi kemungkinan perubahan satu agent bertabrakan dengan agent lain. Fitur ini tidak menggantikan setelan keepalive di atas, jadi atur setelan itu apa pun aplikasi terminal yang Anda pakai.

Lihat sendiri cara kerjanya

SSH multi-pane, Command Recipes (Cmd+J) dan Control Room (sebelumnya War Room) multi-agent: Anda bisa mulai gratis.

Unduh MXterm Pro

Sudah punya MXterm Pro? Baca panduan penyiapan →

Baru mengenal MXterm Pro? Lihat harga →

Pertanyaan yang Sering Diajukan

Apa beda ServerAliveInterval dan ClientAliveInterval?

ServerAliveInterval adalah setelan di sisi client, di ~/.ssh/config Mac Anda sendiri. Setelan ini membuat mesin Anda mengirim ping ke server. ClientAliveInterval adalah padanannya di sisi server, diatur di /etc/ssh/sshd_config pada mesin remote. Setelan ini membuat server mengirim ping ke client Anda. Anda hanya butuh salah satu sisi agar keepalive bekerja. Mengatur keduanya tidak berbahaya, dan berguna jika Anda tidak yakin ujung mana yang timeout.

Haruskah saya menjalankan job panjang di tmux atau screen, bukan mengandalkan keepalive?

Ya, untuk apa pun yang harus bertahan dari putus koneksi yang sebenarnya, bukan sekadar timeout idle. ServerAliveInterval hanya mencegah koneksi dimatikan karena terlihat idle. Setelan ini tidak bisa menyelamatkan job jika MacBook sleep, Wi-Fi putus, atau layar ditutup. Build atau migrasi di dalam tmux atau screen di server remote tetap berjalan apa pun yang terjadi pada koneksi lokal Anda. Sambungkan kembali dengan tmux attach setelah Anda online lagi.

Kenapa sesi SSH saya tetap timeout padahal ServerAliveInterval sudah diatur?

Biasanya karena MacBook sempat sleep, bukan karena keepalive gagal. Mac yang sleep tidak menjalankan SSH client, sehingga tidak ada paket keepalive yang keluar. SSH melaporkan putusnya koneksi begitu Anda membangunkan Mac.

Bagaimana cara memeriksa bahwa setelan keepalive saya benar-benar bekerja?

Cara paling sederhana adalah membiarkan satu sesi idle lebih lama dari waktu yang dulu memutusnya, lalu memastikan sesi itu masih ada. Untuk melihat paketnya langsung, jalankan sudo tcpdump -i en0 host <server-ip> and port 22 di jendela kedua. Perhatikan paket kecil yang keluar setiap ServerAliveInterval detik, bahkan saat sesi idle. Pane yang dibuka dari host tersimpan mengirimnya setiap 30 detik.

Tanya AI tentang MXterm Pro

Buka jawaban langsung di ChatGPT, Claude atau Perplexity, berdasarkan halaman ini. Jawaban ditulis oleh asisten, bukan kami, jadi periksa sumber yang dikutipnya.

Pertanyaan yang dikirimBagaimana cara mencegah koneksi SSH terkena timeout di MacBook, dan apa fungsi ServerAliveInterval dan ServerAliveCountMax?