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