論壇總覽 MP500系列微型電腦討論區 MP520-20 過一段時間自動斷線 回覆至:MP520-20 過一段時間自動斷線

#1933
Huang Jia-Bin
管理員
    @jb

    Gemini 2.5 Pro:

    好的,SSH 連線閒置一段時間後自動斷線是一個常見問題,通常是由於客戶端、伺服器端或中間的網路設備(如防火牆、路由器)的閒置超時設定所導致。

    要解決這個問題,主要的方法是讓 SSH 連線定期發送「保持連線」(KeepAlive)的訊號,告訴伺服器和中間設備這個連線仍然是活躍的。有兩種主要方式可以設定:

    方法一:修改客戶端 SSH 設定 (推薦,影響本機所有連線或特定連線)

    這是最常用且建議的方式,因為你只需要修改自己電腦上的設定,不需要動到遠端伺服器。

    針對單次連線 (使用命令列選項):

    在每次連線時加上 -o ServerAliveInterval=N 選項,其中 N 是秒數。這會讓你的 SSH 客戶端每隔 N 秒就向伺服器發送一個保持連線的訊號。建議值可以是 60 或 120 秒。

    Bash
    ssh -o ServerAliveInterval=60 your_username@your_server_ip

    修改 SSH 客戶端設定檔 (永久生效):

    編輯你本機上的 SSH 客戶端設定檔 ~/.ssh/config (如果檔案或目錄不存在,請自行建立)。

    開啟檔案 (例如使用 nano ~/.ssh/config 或 vim ~/.ssh/config)
    加入以下內容:

    Host *
    ServerAliveInterval 60
    # ServerAliveCountMax 3 # (可選) 連續 N 次沒收到回應才斷線,預設值通常夠用

    說明:

    Host * 表示這個設定套用到所有 SSH 連線。如果你只想套用到特定的伺服器,可以將 * 換成伺服器的別名或 IP 地址/主機名,例如 Host my-debian-server。
    ServerAliveInterval 60: 每 60 秒發送一次 KeepAlive 訊號給伺服器。
    ServerAliveCountMax 3: 如果客戶端發送了 KeepAlive 訊號,但連續 3 次 (預設值) 都沒有收到伺服器的回應,則斷開連線。通常不需要特別設定這個值。
    儲存檔案並退出編輯器。之後你用 ssh your_username@your_server_ip 連線時,就會自動套用這個設定。
    方法二:修改伺服器端 SSH 設定 (影響所有連線到該伺服器的客戶端)

    如果你有遠端 Debian 伺服器的管理權限 (例如 sudo 權限),並且希望所有連線到這台伺服器的客戶端都能保持連線(即使客戶端沒有設定),可以修改伺服器端的 SSH 設定。

    登入你的 Debian 伺服器。
    編輯 SSH 伺服器設定檔:

    使用 sudo 權限編輯 /etc/ssh/sshd_config 檔案。

    Bash
    sudo nano /etc/ssh/sshd_config
    # 或者 sudo vim /etc/ssh/sshd_config

    找到或加入以下設定行:

    在檔案中找到 ClientAliveInterval 和 ClientAliveCountMax 這兩行。如果它們被 # 註解掉了,請取消註解 (刪除行首的 #);如果不存在,請自行加入。

    ClientAliveInterval 60
    ClientAliveCountMax 3

    說明:ClientAliveInterval 60: 伺服器會每隔 60 秒檢查一次客戶端是否還有回應。如果沒有回應,伺服器會發送一個 KeepAlive 訊號給客戶端。
    ClientAliveCountMax 3: 如果伺服器發送了 KeepAlive 訊號,但連續 3 次都沒有收到客戶端的回應,伺服器就會主動斷開這個連線。
    儲存檔案並退出編輯器。
    重新啟動 SSH 服務:

    為了讓設定生效,需要重新啟動 SSH 伺服器。

    Bash
    sudo systemctl restart sshd
    # 或者在較舊的系統上可能是:
    # sudo service ssh restart

    總結與建議

    優先推薦使用方法一 (修改客戶端設定),因為它最簡單,不需要伺服器權限,且只影響你自己的連線。~/.ssh/config 的方式可以一勞永逸。
    如果你管理伺服器,且希望伺服器主動管理閒置連線(例如,為了釋放資源或安全考量而踢掉無回應的客戶端),則可以設定方法二 (修改伺服器端設定)。
    ServerAliveInterval (客戶端設定) 和 ClientAliveInterval (伺服器設定) 的目的相似,都是為了保持連線活躍,防止被中間設備斷開。通常只需要設定其中一種即可。如果你同時設定了兩者,連線會更加不容易斷開,但會產生稍微多一點的背景流量。
    通常設定客戶端的 ServerAliveInterval 60 就足以解決大部分閒置斷線的問題了。