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

正在檢視 3 篇文章 - 1 至 3 (共計 3 篇)
  • 作者
    文章
  • #1931
    paizanmay
    參與者
      @paizanmay

      我的 MP520-20 直接用有線網路連 router,沒有接螢幕跟滑鼠鍵盤

      我用 ssh 進去後,放著一段時間沒用,他就會自動斷線(router 的清單看不到,且也連不到)

      但紅色的燈還亮著,應該是有開機的

      試過把所有的進入 idle 狀態都關掉了,但還是沒有用

      不知道要怎麼排查問題

      #1932
      Huang Jia-Bin
      管理員
        @jb

        ChatGPT o3:

        以下幾個方向幾乎能解決 99 % 的「SSH 放著就被踢」問題。建議先從 1 → 2 → 3 依序排查,最後再做 4 作為保險。

        1 . 檢查是不是 shell 自己在踢人(TMOUT)
        echo $TMOUT

        如果輸出是一個數字(例如 900),代表 bash 在偵測到 900 秒 無輸入就自動 logout。
        解法:在 ~/.bashrc(或 /etc/profile → 全系統)註解掉/刪掉 TMOUT= 這行,或改成 export TMOUT=0。

        # ~/.bashrc
        unset TMOUT # 或 export TMOUT=0

        2 . 在 Server 端 打開 keep-alive(最乾脆)
        你有 sudo 權限就用這招;不用逐台修改 Client。
        sudo nano /etc/ssh/sshd_config
        # 加 / 改成:
        ClientAliveInterval 60 # 每 60 秒對 client 詢問一次
        ClientAliveCountMax 3 # 若連續 3 次無回應才斷線(= 實際約 3 分鐘)

        sudo systemctl reload sshd # 不會中斷現有連線

        原理:sshd 主動丟「還活著嗎?」封包,伺服器、閘道或防火牆就不會把這條 TCP 視為「閒置」而丟棄。

        3 . 只能動 Client 時的做法
        在 自己的筆電 / PC 設定 ~/.ssh/config(沒有就新建):

        Host *
        ServerAliveInterval 60 # Client 每 60 秒對 Server 嗅探
        ServerAliveCountMax 3
        TCPKeepAlive yes

        一次性連線也可以臨時加參數:

        ssh -o ServerAliveInterval=60 user@host

        4 . 撐傘:tmux / screen 或乾脆用 mosh
        tmux/screen:就算 SSH 斷,你重新連進來 tmux attach 就續作業,不怕程式被 kill。
        mosh:在 UDP 上自帶心跳,網路飄移或休眠後也會自動重連,比 SSH Keep-Alive 更堅韌。

        我自己的偏好(給你參考)
        Server 端 ClientAliveInterval=60 + tmux。
        這組合在雲端 VPS、公司防火牆後、甚至咖啡廳 Wi-Fi 都撐得住;60 秒心跳不會造成明顯負擔,又幾乎不掉線。
        設定完別忘了重新登入測試,觀察 10–15 分鐘若不再斷線就 OK。如果還是掉,就八成是中途路由/企業防火牆砍長連線,這時 mosh 是最省事的終極武器。祝連線順暢!

        #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 就足以解決大部分閒置斷線的問題了。

        正在檢視 3 篇文章 - 1 至 3 (共計 3 篇)
        • 需要以回覆此篇主題...