Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux SSH 連線自動斷開問題解決:ClientAliveInterval、ServerAliveInterval、TCPKeepAlive 三層保活機制完整配置

編輯:關於 Linux

SSH 連線閒置超時自動斷開是常見痛點。解決需同時配置 **伺服端** (ClientAliveInterval) 與 **客戶端** (ServerAliveInterval),並理解 TCPKeepAlive 的網路層差異。本文提供雙端配置、systemd 服務化、tmux 替代方案的完整指南。

SSH 保活機制示意圖

三層保活機制比較

層級參數配置端機制優點缺點
應用層 (SSH 協定) ServerAliveInterval 客戶端 定期發送 SSH_MSG_GLOBAL_REQUEST 要求回應 穿透 NAT/防火牆、偵測應用層凍結 需客戶端配置
應用層 (SSH 協定) ClientAliveInterval 伺服端 定期發送 SSH_MSG_CHANNEL_REQUEST 要求回應 統一管理所有連線、無需客戶端配合 無法偵測客戶端崩潰未發 FIN
傳輸層 (TCP) TCPKeepAlive 雙端 (核心) TCP KEEPALIVE 封包 (預設 2 小時) 無需應用程式支援、核心自動處理 間隔過長、防火牆常丟棄、無法偵測應用層邏輯凍結

推薦配置:雙端應用層保活 (最有效)

伺服端 /etc/ssh/sshd_config

# 發送保活請求間隔 (秒)
ClientAliveInterval 60
# 最大無回應次數 (60*3=180 秒無回應則斷開)
ClientAliveCountMax 3
# 確保 TCP 層也開啟 (防禦性)
TCPKeepAlive yes

# 重新載入
sudo systemctl reload sshd

客戶端 ~/.ssh/config (或 /etc/ssh/ssh_config)

Host *
    # 每 30 秒發送保活
    ServerAliveInterval 30
    # 2 次無回應斷開 (30*2=60 秒)
    ServerAliveCountMax 2
    # 關閉 TCPKeepAlive 避免衝突 (可選)
    TCPKeepAlive no
    # 自動多路複用 (加速後續連線)
    ControlMaster auto
    ControlPath ~/.ssh/cm-%r@%h:%p
    ControlPersist 10m

systemd 服務化:讓 SSH 連線在後台持久存活

# ~/.config/systemd/user/ssh-tunnel@.service
[Unit]
Description=Persistent SSH Tunnel to %i
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/ssh -N -o ServerAliveInterval=30 -o ServerAliveCountMax=2 %i
Restart=always
RestartSec=10
StandardOutput=journal

[Install]
WantedBy=default.target
# 啟用
systemctl --user enable ssh-tunnel@myserver
systemctl --user start ssh-tunnel@myserver

終極方案:tmux / screen (會話級持久化)

# 伺服端開啟會話
tmux new -s mysession

# 斷線後重新附著
tmux attach -t mysession

# 系統級自動啟動 (需啟用 linger)
sudo loginctl enable-linger $USER
# ~/.config/systemd/user/tmux@.service 類似上述
  • 保留完整終端機狀態 (歷史、游標、執行中程式)
  • 支援多視窗、分割面板、複製模式
  • 不依賴 SSH 保活,網路中斷後重連即可恢復

常見誤區

  • 只設伺服端 ClientAliveInterval:客戶端若為舊版/嵌入式裝置不支援回應,仍會斷開
  • 只設客戶端 ServerAliveInterval:伺服端若設 ClientAliveInterval 0 (預設關閉),不會主動斷開殭屍連線,佔用資源
  • 依賴 TCPKeepAlive:預設 7200 秒間隔,防火牆常攔截,無法滿足「閒置 5 分鐘斷開」需求

配置雙端 ServerAliveInterval/ClientAliveInterval 並搭配 tmux,可同時解決「閒置斷開」、「會話丟失」、「殭屍連線佔用」三大痛點。

Copyright © Windows教程網 All Rights Reserved