【Linux疑難雜症】ssh timeout… WTF 被踢拉…

2023/08/17閱讀時間約 2 分鐘
raw-image

圖片來源...

Linux是一個非常好用、兼具效能、靈活度高的作業系統, 唯一的缺點就是學習曲線較為陡峭, 一開始難以入門, 但假若學會了, 對於我們的作業效率勢必事半功倍, 尤其是軟體工程師、IT人員…。

過程中難免遇到一些零零總總的狀況, 不過沒關係! 一項項慢慢解決即可。

前景提要

raw-image

圖片來源...

有一天,工程師小明在進行遠端連線SSH作業時,發現一件奇怪的事情,明明就是跟朋友聚餐一下,兩個小時後回來,咦! 奇怪, 怎麼我剛剛遠端連線到伺服器的終端機都不動了!!! WTF… 不會是壞掉了吧! 這時候小明發揮工程師的精神,一定要實事求是,將問題給找出來…, 那麼我們就來幫小明一把唄…。

什麼原因呢?

主要是SSH預設會有一個檢查機制,假如說一段時間內,客戶端沒有發送任何封包請求來往時,伺服端就會視為這一個連線是失效的,因此會強制中斷連線,避免占著茅坑不拉屎的狀況,但不必擔心,這是有幾個解決方法的,就在底下,請根據需求選取一種解決方案吧!

如何解決?

客戶端配置

由於連線的過程中會有心跳機制, 伺服端會在一定時間內需要收到Client的封包, 否則就視為拒絕連線的對象。

因此我們可以在Client端配置固定時間向伺服端發送封包, 以確保我們的連線無虞。

# 編輯客戶端的ssh連線配置
vim ~/.ssh/config

# 每60秒發送一次keep alive封包
ServerAliveInterval 60

# 斷開時重新連接的次數
ServerAliveCountMax 5

伺服端配置

我們也可以延長伺服端的時效性, 以及給予更寬鬆的最大延時次數。

# 編輯伺服端的連線配置
vim /etc/ssh/sshd_config

# 將超時設定為600秒(10分鐘), 最大允許3
ClientAliveInterval 600
ClientAliveCountMax 3

動態配置

如果我們不希望這種未逾時的連線成為常態的配置時, 我們可以在連線時指定參數, 告訴這次連線每60秒發送一次封包, 避免被中斷。

ssh -o ServerAliveInterval=60 user@remote_host

使用tmux or screen…等工具來避免中斷導致程式運行中止

如果您需要在SSH連接中保持長時間運行的任務,但不希望被空閒超時終止,可以使用tmux或screen工具。這些工具可以創建會話,即使斷開SSH連接,任務也會在後台繼續運行。這樣,您可以隨時重新連接到會話並恢復工作。

結語

Linux系統雖然相對門檻較高, 但使用者也都非常樂意分享遇到的狀況以及處理方法,所以基本上都不用害怕這個系統, 而且處理效能相對較佳, 尤其我們開發雲服務的應用程式時就非常需要Linux的技能, 不妨好好的學習一番, 跟上時代的趨勢。

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識

91會員
260內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!