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