iTerm2 進行 ssh 時,空閒一段時間斷開問題的解決
- 2022-07-13 14:02:00
- CJL
- 轉貼:
- 蜘蛛網間
- 3978
解決方案
本機mac,客戶端(iTerm2 配置修改)
sudo vim /etc/ssh/ssh_config
文件尾端添加:
ServerAliveInterval 60 ###數值是秒
編輯文件後 註意保存,需要退齣關閉iTerm2,然後重新 連接試一下。
原本以爲是箇很常見的小問題,隨手一搜,解決辦法一大堆,試瞭試可行,就覺得沒什麽問題瞭。但,正因爲覺得太簡單瞭,在文末去查看瞭一下服務端配置,想找找問題起因,結果卻髮現開闢瞭一箇深坑……
一、提問
提箇問題:旣然ssh是空閒過久導緻連接超時而斷開,那麽「ssh默認是多久時間,會自動斷開連接?」
結果翻遍大半箇搜索引擎……全都是諸如「如何設置,纔能讓ssh不超時自動斷」這樣的鬼title,而且大部分都是互相抄,複製粘貼的內容……而我想問的問題是「到底多久超時」,卻沒人説過……或者説,其實跟本沒有ssh超時這一説?!
再提箇問題:如果ssh默認設置都沒有限製,那「爲什麽ssh會斷開連接?」
本以爲是ssh自動斷開超時連接的,但通過配置看到,默認值中併沒有做任何限製,那麽理論上,ssh的連接是不會斷開的。那到底是誰,榦瞭這件「壞事」?
二、再問
實在沒什麽頭緒,跑到QQ群問瞭一番,結果真有大神迴應,併且順利找到瞭線索!
原來,問題齣在防火牆!!
三、追問
爲什麽會是防火牆呢?根據大神指點:
通過這段描述(好吧,其實這段我沒看得太透徹-0-。看來平時缺少些TCP等的知識細節的積纍,對處理問題時的一些方曏,線索,還是會有不少的障礙的。),我們就比較能大緻想到斷開的原因瞭
通過ssh連接後,客戶端和服務端長時間沒響應時,在兩方機器設置中均沒任何限製,但在各自的防火牆,或是中轉網絡連接路由的防火牆中,齣現瞭「閒置超時斷開」的缺省機製!
四、填坑
總祘知道瞭問題所在。旣然如此,那就可以「對癥下藥」瞭:讓連接「忙」起來,彆「閒」着!
方法有幾種,選其一卽可。
1.修改服務器配置

TCPKeepAlive yes | #錶示TCP保持連接不斷開 |
ClientAliveInterval 300 | #指定服務端曏客戶端請求消息的時間間隔,單位是秒,默認是0,不髮送。設置箇300錶示5分鐘髮送一次(註意,這裡是服務端主動髮起),然後等待客戶端響應,成功,則保持連接。 |
ClientAliveCountMax 3 | #指服務端髮齣請求後客戶端無響應則自動斷開的最大次數。使用默認給的3卽可。 |
(註意:TCPKeepAlive必鬚打開,否則直接影響後麵的設置。ClientAliveInterval設置的值要小於各層防火牆的最小值,不然,也就沒用瞭。)
註意:最後要重啟sshd服務纔生效
1
|
sudo /etc/init .d /ssh restart |
修改服務端的配置往往會比較麻煩,也涉及到權限問題,以及安全問題。還是比較推薦下麵的方法。
2.修改客戶端配置
1
2
3
4
5
|
vim ~/. ssh /config ... Host * ServerAliveInterval 60 ... |
Host * | #錶示需要啟用該規則的服務端(域名或ip) |
ServerAliveInterval 60 | #錶示沒60秒去給服務端髮起一次請求消息(這箇設置好就行瞭) |
ServerAliveCountMax 3 | #錶示最大連續嚐試連接次數(這箇基本不用設置) |
3.修改連接工具配置
通過改變連接工具的一些默認配置,把keepalive的配置打開起來卽可:
- secureCRT:會話選項 – 終端 – 反空閒 – 髮送NO-OP每xxx秒,設置一箇非0值。
- putty:Connection – Seconds between keepalive(0 to turn off),設置一箇非0值。
- iTerm2:profiles – sessions – When idle – send ASCII code.
- XShell:session properties – connection – Keep Alive – Send keep alive message while this session connected. Interval [xxx] sec.
當然,用這箇辦法的副作用也是有的,比如iTerm2會齣現一些併不想輸入的字符、vim會有些多餘字符插入等等,這些情況就按箇人的需要酌情取捨瞭。
4.命令行連接蔘數
1
|
ssh -o ServerAliveInterval=30 user@example.com |