-
1 # smile丶流年
-
2 # IT大叔Cc
回答行業問題
這個其實是shell環境和ssh會話的問題,問題看似簡單,其實說起來,話題很長。
首先解答問題中兩者的區別,然後對ssh會話和shell環境的關係、ssh會話和會話超時之間展開說明。
TMOUT是shell環境下的變數,從名字就可以看出是控制超時時間的,ClientAliveInterval引數是sshd服務會話連線保活的引數。
前者是超時時間,後者是保活連線,看似是一個很對立的關係,但是它們之間,首先來說一下它們的區別。
兩者區別shell空閒等待時間TMUOT變數
TMOUT是shell環境下的一個環境變數,它控制shell環境系統空閒等待時間。一般配置在/etc/profile檔案當中,Linux系統預設不配置TMOUT環境變數的值。
當TMOUT的值大於0時,比如為10,shell進空閒等待當終端超過10秒沒所有輸入,bash將關閉當前shell環境,終端連線斷開,長時間離開電腦後斷開終端連線,對伺服器也是一種保護。
從上圖可以看出,配置TMOUT環境的值變數為10之後,ssh終端就自動斷開了。
ClientAliveInterval sshd服務保活引數
這個引數和ClientAliveCountMax引數配合使用,sshd服務配置這兩個引數之後,比如ClientAliveInterval = 300、ClientAliveCountMax = 3。sshd服務會每隔300秒會給客戶端傳送心跳包,當客戶端沒有響應時會進行3次重試,重試後依然沒有響應,斷開ssh連線。
到這裡就看出它們的區別了,TMOUT是控制shell環境虛擬終端層面,當終端沒有輸入時,多長時間斷開終端。而ClientAliveInterval引數是控制sshd服務和ssh客戶端之間,沒有網路通訊時多長時間斷開和客戶端的連線。
總是說shell環境和sshd服務,那它們之間有什麼關係呢?繼續往下。
shell環境和sshd服務的關係現在使用的的終端工具比如xshell、putty、CRT等都集成了ssh客戶端,當終端發起ssh請求和sshd服務建立連線,並且透過驗證,這時sshd服務將建立一個會話,然後呼叫系統介面建立一個新的pts字元裝置檔案,同時sshd服務會建立一個shell環境。
最後將ssh會話和pts字元裝置檔案繫結,字元裝置檔案再和和shell繫結,這樣就建立了ssh會話和shell環境的連線。
shell處理完命令請求,然後依次shell--pts符號裝置檔案--ssh會話--終端工具,這樣就完成了終端介面,控制Linux shell的過程。
從上面的闡述可以得出,shell是sshd服務建立的,但是它們又是獨立的,透過pts字元裝置檔案聯絡在一起。
ssh會話保活和自動超時平時使用ssh工具連線linux伺服器時,總是超時,這時就可以配置sshd服務定時進行心跳檢測,防止通訊超時斷開。
現在ssh工具也都具備網路保活的功能,也可以透過設定客戶端程式來進行連線保活,原理和sshd服務一樣,定期傳送心跳包。
對於安全比較重視的人來說,這樣顯然是不合理的,這時就可以設定shell環境變數TMOUT定義系統空閒等待時間,在不使用終端時自動斷開。
這裡一直是在說超時,那麼什麼都不配置,ssh會話為什麼超時了?繼續往下看。
ssh會話為什麼會超時?ssh會話屬於TCP長連線,linux系統定義了TCP長連線的超時時間,一般是7200秒,也就是兩個小時,長連線達到這個時間就會發起心跳包,檢測TCP連線,但是在實際場景到不了這個時間就會斷開,比如NAT環境。
ipv4地址有限,我們的上網環境一般都在NAT路由裝置後面,NAT路由維護著一張NAT表,當tcp連線長時間沒有資料通訊,NAT路由就會將這個連線從NAT表中移除,這會引起ssh會話就中斷超時。
NAT超時時間遠遠達不到兩個小時,所以TCP長連線如果沒有心跳,很容易出現超時現象,再有就是網路不穩定,也會造成連線斷開。
總結,我們從最初的shell環境變數TMOUT出發,將shell和sshd服務進行關聯,介紹了它們之間的關係,引出了shell環境超時和sshd服務超時,並說明了自動超時和保活會話的應用,最後解釋了服務超時的原因,環環相連,到這裡我想對於ssh會話已經有了基本瞭解。
回覆列表
在profile中TMOUT和SSHD中ClientAlivelnterval引數設定都能實現遠端會話閒置超時嗎?還是我對Sshd中的引數理解有錯誤,為什麼我在虛擬機器中配置了sshd下ClentAliventerval 120 和ClientAliveCountMax 0無法實現會話閒置超時