在 Linux 系統管理中,SSH 連線若長時間閒置便會自動斷開,這對於需要持續作業的開發者或系統管理員相當困擾。其實只要調整 SSH 服務端的兩個參數 ClientAliveInterval 與 ClientAliveCountMax,即可讓連線保持存活,不再因逾時而中斷。
ClientAliveInterval:指定伺服器端向客戶端發送心跳請求的時間間隔(秒)。預設為 0(不發送)。設為 60 即代表每 60 秒發送一次請求,客戶端回應後即可維持長連線。值得注意的是,這是由「伺服器主動發起」保持連線,而非客戶端(如 PuTTY、SecureCRT 等)發起。
ClientAliveCountMax:伺服器發送請求後,客戶端未回應的最大次數。達到此值則自動斷開連線。預設值 3 通常足夠,正常情況下客戶端不會不回應。
grep "ClientAlive" /etc/ssh/sshd_config
# 輸出範例:
# ClientAliveInterval 0
# ClientAliveCountMax 3
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
建議使用 sed 直接取代,或手動編輯 /etc/ssh/sshd_config:
sed -i "s/#ClientAliveInterval 0/ClientAliveInterval 60/g" /etc/ssh/sshd_config
sed -i "s/#ClientAliveCountMax 3/ClientAliveCountMax 3/g" /etc/ssh/sshd_config
若檔案中已有該行但被註解,上述指令可生效;若無該行,請手動新增:
ClientAliveInterval 60
ClientAliveCountMax 3
grep "ClientAlive" /etc/ssh/sshd_config
diff /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
systemctl restart sshd
# 或舊版系統:
service sshd restart

ClientAliveInterval 改回 0 並重啟服務即可。