如果使用SSH連線到遠端Linux伺服器,則會注意到,如果將SSH會話保持一段時間不活動,然後再次嘗試使用它,則SSH會話會斷開連線,並顯示以下錯誤訊息:
:client_loop: send disconnect: Broken pipe
在某些系統上,它將顯示“寫入失敗:管道損壞”或“連線被遠端主機關閉”。
讓我們看看是什麼導致此錯誤,以及如何使SSH連線保持活動狀態。
使用SSH修復損壞的管道錯誤由於連線不活躍,所以ssh關閉了連線,通常預設是5分鐘。
為避免SSH會話斷開連線,可以在特定時間間隔從伺服器向客戶端(ClientAliveInterval)或從客戶端向伺服器(ServerAliveInterval)傳送“活動訊息” 。
這樣,可以使SSH會話保持活動狀態,因為客戶端和伺服器之間存在通訊,並且伺服器可以理解客戶端仍然存在。
現在,有兩種方法可以做到這一點。您可以將活動訊息從客戶端傳送到伺服器,或者從伺服器傳送到客戶端。
如果透過SSH連線到多臺伺服器,請在您的計算機上進行設定。如果是系統管理員,並且有幾個使用者抱怨SSH連線頻繁斷開,則可以在伺服器上進行設定。方法1:客戶端SSH配置更改假設想透過最多10分鐘(600秒)的空閒時間來保持SSH連線的活動狀態。
透過SSH連線到遠端Linux系統時,可以這樣設定以下ServerAliveInterval值:
ssh -o ServerAliveInterval=600 username@server_ip_address
現在,此功能可以正常工作,但是每次連線到伺服器時手動輸入此選項很麻煩。為什麼不將其永久化?
如果您感到懶惰或不想詳細介紹,請使用以下命令將有效間隔設定為600秒(10分鐘):
echo "ServerAliveInterval 600" >> ~/.ssh/config
這會將您將使用的所有SSH連線的ServerAliveInterval值設定為10分鐘。如果需要,請嘗試一下。
如果您想使其更合適,則應如下新增:
Host *ServerAliveInterval 600
方法2:伺服器端SSH配置更改伺服器的SSH配置檔案通常位於/etc/ssh/sshd_config
如果開啟此檔案,能看到以下兩個引數
ClientAliveInterval: 這是不活動的時間段,在該時間段之後,伺服器將向ssh連線的客戶端傳送活動訊息。ClientAliveCountMax:這是伺服器將重試傳送活動訊息的次數。ClientAliveInterval設定為200秒,把ClientAliveCountMax設定為3。伺服器將在200s後傳送活動訊息,若客戶端無迴應,400s後再發送一次,600s再發送一次,若客戶端無響應,ssh連線斷開
儲存並退出檔案。
請勿將SSH連線超時設定為幾個小時,那將浪費資源。