在日常的 SSH 連接過程中,特別是當(dāng)你長時間不進(jìn)行操作時,連接經(jīng)常會出現(xiàn)自動斷開的問題。這個問題的原因通常是由于 SSH 連接處于閑置狀態(tài),服務(wù)器為了節(jié)省資源,自動切斷了連接。解決這個問題,我們可以通過調(diào)整 SSH 配置文件來保持連接的穩(wěn)定性,確保在沒有操作的情況下也能持續(xù)連接。
1.開啟 TCP Keepalive(保持活動連接)
在 sshd_config 文件中找到 TCPKeepAlive 這個配置項,確保它的值是 yes。這意味著服務(wù)器將定期檢查與客戶端的連接是否仍然有效。
這樣做的目的是防止由于空閑超時導(dǎo)致連接被斷開,TCP 連接仍然會通過“心跳”機制保持活動狀態(tài)。
TCPKeepAlive yes
2.配置 ClientAliveInterval 和 ClientAliveCountMax
ClientAliveInterval 控制服務(wù)器端向客戶端發(fā)送“保持活動”請求的時間間隔。默認(rèn)情況下,它的值是 0,表示服務(wù)器不主動向客戶端發(fā)送保持活動的請求。為了避免因空閑導(dǎo)致連接被關(guān)閉,可以將其設(shè)置為 60 秒,表示服務(wù)器每分鐘向客戶端發(fā)送一個“活躍”消息。
ClientAliveCountMax 表示服務(wù)器發(fā)送的保持活動請求沒有得到客戶端響應(yīng)時,服務(wù)器會等待多少次。如果超過了這個次數(shù),連接將被關(guān)閉。默認(rèn)值是 3,也可以根據(jù)實際需要調(diào)整。
配置如下:
ClientAliveInterval 60
ClientAliveCountMax 3
這樣配置后,服務(wù)器會每 60 秒發(fā)送一次保持活動的請求,如果客戶端沒有響應(yīng),則會嘗試最多 3 次。3 次之后,服務(wù)器會認(rèn)為客戶端已經(jīng)不再活躍,從而斷開連接。
二、配置生效
修改完 sshd_config 文件后,需要使新的配置生效。通常,很多教程建議使用 service ssh restart 或 systemctl restart sshd 來重啟 SSH 服務(wù),但在 CentOS 7(及以上版本)中,可能會遇到命令無法執(zhí)行的問題。為了避免這些問題,可以使用 service sshd reload 來重新加載 SSH 配置文件,而不需要完全重啟服務(wù)。
service sshd reload
三、檢查配置是否生效
修改并重新加載 SSH 配置之后,你可以嘗試連接到服務(wù)器,保持空閑狀態(tài)一段時間(比如半小時或更長),看看是否還會被自動斷開。如果配置生效,應(yīng)該就不會再出現(xiàn)自動斷開的情況了。
另外,你可以通過命令檢查當(dāng)前的 SSH 配置:
ss -tuln | grep :22
這個命令可以查看 SSH 服務(wù)是否在監(jiān)聽 22 端口(默認(rèn)的 SSH 端口)。如果看到類似于 tcp LISTEN 0 128 *:22 *:* 的輸出,表示 SSH 正在監(jiān)聽。
四、其他常見的連接斷開問題
1.網(wǎng)絡(luò)防火墻和 NAT 設(shè)置: 有時,防火墻或者 NAT 設(shè)備也會在連接空閑時斷開 SSH 會話。為了避免這個問題,可以確保你的防火墻配置不會中斷長時間空閑的連接。如果使用了外部防火墻或路由器,可以檢查是否有相關(guān)的“空閑超時”設(shè)置。
2.客戶端設(shè)置: 如果你是通過某些客戶端工具(如 PuTTY、MobaXterm 等)連接的,可能需要檢查客戶端的設(shè)置,有些客戶端也有類似的保持活動連接的設(shè)置。例如,PuTTY 中有一個選項可以設(shè)置每隔一段時間發(fā)送“空包”以保持連接活躍。
3.長時間空閑斷開: 如果你使用的是某些云服務(wù)或者遠(yuǎn)程管理工具,可能會因為云服務(wù)的超時策略而斷開 SSH 連接,這時可以檢查云平臺的相關(guān)配置,看看是否可以調(diào)節(jié)空閑超時。