客戶端連接linux經常間隔性斷開鏈接【轉】


起因

在使用SecureCRT通過telnet或SSH訪問linux時,總是出現過段時間操作就會斷開連接提示重連的問題。起初以為是網絡不穩定造成的,但我測試發現在服務器端一直可以ping通客戶端IP,同樣客戶端也可以ping通服務器,所以網絡應該是沒問題的(linux裝在虛擬機下,網絡模式設置為橋接,路由器也沒問題)。
試用了最新的64位SecureCRT(本機WIN7 64位,開始用的是32位SecureCRT),putty客戶端仍然存在這個問題,所以軟件不兼容的問題也排除了。

最后通過各種摸索,終於知道了問題的主要原因,因為連接是可以的,只是會超時斷開,根據網絡結構來看,問題就可能出現在一下這幾個部分

  1. 服務器存在防火牆,會關閉超時空閑連接,或設置了關閉超時空閑連接。
  2. 客服端和服務器之間存在路由器,路由器也可能帶有防火牆,會關閉超時空閑連接。
  3. 客服端存在防火牆,會關閉超時空閑連接。

解決思路


知道問題,我們就有解決方法了:

既然問題都是會斷開超時的空閑連接,那么我們就可以讓客戶端與服務器之間的連接“不空閑”,

  可以從服務器方面入手:

 

  這里需要服務器權限去修改/etc/ssh/sshd_config配置文件 ClientAliveInterval 300(默認為0,這里如果選項前面有“#”,表示被注釋掉需要打開,同時TCPKeepAlive 也需要設置為yes)這個參數300的是意思是每5分鍾,服務器向客戶端發一個消息,用於保持連接,當然數值要比你的三個防火牆超時時間的最小值小,否則還沒等發送空閑包,連接就被斷開了。
修改后使用service sshd reload 命令執行生效,這個修改適用於所有終端連接,但不支持telnet方式連接,SSH方式可以保持連接。

  也可以從客戶端入手:

  如果沒有服務器權限則可以使用改變客戶端的方式來讓讓客戶端與服務器之間的連接“不空閑”,思想是一樣的即讓客戶端每隔多長時間向服務器發一個消息,用於保持連接,上面提到的兩個客戶端secureCRT和putty都可以設置,這里的時間也是需要比你的三個防火牆超時時間的最小值小。
secureCRT在選項 終端 反空閑 中設置每隔多少秒發送一個字符串,或者是NO-OP協議包。
putty:putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默認為0, 改為300。

除了去適用防火牆,當然也可以通過改變防火牆來解決問題

  直接禁用防火牆可以實現,但整個網絡的安全性就成問題了,去配置三個防火牆的規則也是讓人比較吐血的事,這里就不贅述了,有耐心的朋友可以自己試試。

總結


  最后還是比較推薦使用客戶端去發送消息包,操作簡單,不會修改服務器文件,僅對自己有效,網絡安全也能保證,並且增加的消息包也不會造成什么網絡負擔。
以上網上的資料加個人的理解,在這里給大家分享下,如有表述不正確的地方希望指出,共同學習共同進步嘛,by kylin9578(成都51testing第17期學員)

引用自 http://bbs.51testing.com/thread-987133-1-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM