文章目錄
- 問題
- 解決
- 方法一:配置服務端
- 關于ClientAliveInterval和ClientAliveCountMax
- 1、打開終端,打開SSH配置文件:輸入以下命令:
- 2、打開配置文件后,添加以下內容:
- 3、添加后,Esc按 <Enter>,:wq然后按 Enter 保存更改并關閉編輯器
- 4、重新啟動SSH服務以使設置生效。輸入以下命令:
- 方法二:客戶端配置
- 關于 ServerAliveInterval 和 ServerAliveCountMax
- 方法三:終端設置
- 1、首先,安裝 tmux:
- 2、創建一個新的 tmux 會話:
- 3、開始在新會話中工作。這是您安裝 Ruby 的地方。
- 4、要在工作時暫時退出會話,請按 Ctrl-b 然后 按d
- 5、重新連接后,使用以下命令重新連接到您的 tmux 會話:
問題
之前我說過完美解決 vscode 多設備通過ssh登錄遠程服務器免密登錄,解決了每次打開vscode可以免密碼操縱,那只是第一步。
在開發工作中我們有時會遇到一些問題。問題是某些遠程任務(例如大型軟件構建或更新)需要很長時間,導致 SSH 連接超時。
我自己在 服務器 上部署 應用程序時遇到了一個問題,Ruby 安裝期間 SSH 連接超時。
使用 SSH 連接到遠程服務器時,如果長時間處于空閑狀態,連接可能會斷開。這是因為一些網絡設備和服務器關閉了空閑連接,以至于我們每過一會兒打開vscode界面就會存在斷開重新自動連接的動畫,那么如果我們想一直吊著服務器一直占用連接,本文將提供一些有助于防止此類斷開連接的技巧。
解決
方法一:配置服務端
配置 SSH 服務器以維持空閑連接。為此,您需要/etc/ssh/sshd_config在SSH 服務器的配置文件中編輯ClientAliveInterval和ClientAliveCountMax 。
關于ClientAliveInterval和ClientAliveCountMax
“ClientAliveInterval”和“ClientAliveCountMax”是可以在SSH服務器端設置的參數,用于控制連接的空閑超時時間。
ClientAliveInterval
功能:ClientAliveInterval 定義了 SSH 服務器等待的時間(以秒為單位),如果在該時間段內沒有從客戶端收到任何數據(例如,客戶端沒有發送命令或數據),服務器將向客戶端發送一個 keepalive 信號。
用途:這個設置用于確保 SSH 連接不會因為長時間沒有活動而被防火墻或網絡設備斷開。服務器會定期發送信號,檢查客戶端是否仍然處于活動狀態。
默認值:如果沒有顯式設置,ClientAliveInterval 默認為 0,表示不會發送任何 keepalive 信號,即沒有空閑超時機制。
ClientAliveInterval 60
這表示服務器每 60 秒檢查一次客戶端是否仍然活躍,如果沒有收到客戶端的回應,它會發送一個空的信號。
ClientAliveCountMax
功能:ClientAliveCountMax 參數控制在沒有收到客戶端響應的情況下,服務器可以發送多少次 keepalive 信號。換句話說,這個參數定義了服務器在失去連接時,最多允許的 keepalive 檢查次數。
用途:如果客戶端沒有響應服務器發送的 keepalive 信號,服務器會重復嘗試幾次,直到達到 ClientAliveCountMax 設置的最大次數。如果超出最大次數,服務器會斷開連接。
默認值:默認值為 3,即如果客戶端沒有響應 3 次 keepalive 信號,服務器將關閉連接。
ClientAliveCountMax 3
這表示服務器最多會向客戶端發送 3 次沒有響應的 keepalive 信號。如果客戶端在這 3 次檢查后仍然沒有響應,服務器會斷開連接。
1、打開終端,打開SSH配置文件:輸入以下命令:
sudo vi /etc/ssh/sshd_config
2、打開配置文件后,添加以下內容:
ClientAliveInterval 30
ClientAliveCountMax 60
3、添加后,Esc按 ,:wq然后按 Enter 保存更改并關閉編輯器
這表示:
ClientAliveInterval 30:每 30秒,服務器會向客戶端發送一個空的 keepalive 信號。
ClientAliveCountMax 60:如果客戶端在連續 60 次(即 1800 秒內)沒有響應 keepalive 信號,服務器將斷開連接。
這種配置可以防止由于網絡不活動或客戶端失去連接導致 SSH 會話掛起,從而確保在長時間不活動時連接能夠正常終止。
4、重新啟動SSH服務以使設置生效。輸入以下命令:
sudo service ssh restart
or
sudo systemctl restart sshd
如果設置項已經存在,則直接改變其值即可。另外,各設置的適當值會根據您的環境而有所不同,因此請根據需要進行調整。
請注意,此設置需要管理權限才能訪問 SSH 服務器并進行更改。
另外,由于這是服務器端的設置,因此無法防止由于客戶端網絡不穩定而導致的連接斷開。
方法二:客戶端配置
首先,我們將修改 SSH 客戶端的配置,通過發送定期的“keep alive”消息來防止連接處于空閑狀態。
為此,您需要編輯SSH 服務器的配置文件~/.ssh/config中的ServerAliveInterval和 ServerAliveCountMax
這些選項允許您保持 SSH 連接處于活動狀態,即使它們處于空閑狀態也不會超時。
關于 ServerAliveInterval 和 ServerAliveCountMax
ServerAliveInterval
功能:ServerAliveInterval 參數控制 SSH 客戶端等待的時間(以秒為單位),如果在此時間內沒有從服務器接收到任何數據(如響應、數據等),客戶端將向服務器發送一個 keepalive 信號,目的是保持連接活動。
用途:用于防止 SSH 會話由于長時間沒有活動而被中途斷開,特別是在 NAT 或防火墻環境中,防止空閑連接被意外斷開。
默認值:默認值為 0,即沒有空閑時發送 keepalive 信號。
ServerAliveInterval 60
這表示每 60 秒,客戶端會向遠程服務器發送一次空的 keepalive 信號。
ServerAliveCountMax
功能:ServerAliveCountMax 參數控制 SSH 客戶端最多可以發送多少個 keepalive 信號(由 ServerAliveInterval 定義的間隔)而沒有收到遠程服務器的響應。如果超過這個最大次數,SSH 客戶端將斷開連接。
用途:此設置可以防止客戶端在長時間沒有得到響應時無限制地發送 keepalive 信號,而是會在超出最大次數后主動斷開連接。
默認值:默認值為 3,即客戶端最多發送 3 次沒有響應的 keepalive 信號。
ServerAliveCountMax 3
這表示如果客戶端在連續 3 次沒有收到遠程服務器的響應時,客戶端將斷開連接。
方法三:終端設置
對于終端配置,使用終端多路復用器。 終端多路復用器是一種管理單個物理終端內的多個終端會話的工具。這樣,即使您失去連接,您的會話仍可繼續,并且允許您在重新連接時返回到同一會話。這次我們將使用終端多路復用器來解決這個問題 tmux
1、首先,安裝 tmux:
sudo apt-get install tmux
2、創建一個新的 tmux 會話:
tmux
3、開始在新會話中工作。這是您安裝 Ruby 的地方。
4、要在工作時暫時退出會話,請按 Ctrl-b 然后 按d
5、重新連接后,使用以下命令重新連接到您的 tmux 會話:
tmux attach
這樣,即使您的 SSH 連接斷開,您也可以繼續在服務器上工作。重新連接后,tmux attach您只需運行命令即可連接到會話并從上次中斷的地方恢復。
之后我會持續更新,如果喜歡我的文章,請記得一鍵三連哦,點贊關注收藏,你的每一個贊每一份關注每一次收藏都將是我前進路上的無限動力 !!!↖(▔▽▔)↗感謝支持!