› 論壇總覽 › MP500系列微型電腦討論區 › MP520-20 過一段時間自動斷線
- This topic has 2 則回覆, 2 個參與人, and was last updated 1 weeks, 3 days ago by
Huang Jia-Bin.
-
作者文章
-
2025 年 4 月 23 日 下午 2:40 #1931
我的 MP520-20 直接用有線網路連 router,沒有接螢幕跟滑鼠鍵盤
我用 ssh 進去後,放著一段時間沒用,他就會自動斷線(router 的清單看不到,且也連不到)
但紅色的燈還亮著,應該是有開機的
試過把所有的進入 idle 狀態都關掉了,但還是沒有用
不知道要怎麼排查問題
2025 年 4 月 23 日 下午 6:09 #1932ChatGPT 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=02 . 在 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 是最省事的終極武器。祝連線順暢!2025 年 4 月 23 日 下午 6:12 #1933Gemini 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 就足以解決大部分閒置斷線的問題了。 -
作者文章
- 需要以回覆此篇主題...