[原]Linux ssh遠程連接斷開問題處理辦法


  我們在通過遠程連接操作Linux server的時候,有可能過一段時間忘記操作,便會發生ssh斷開的問題。

  而如果是本地的server,比較好辦,直連設備kill掉ssh,踢掉無效用戶連接,再次鏈接即可,但如果是遠程server的話,那就比較麻煩。

  而使用ssh連接遠程服務器的時候,如果長時間沒有操作,遠程連接就有可能中斷。正在執行的程序和vim等緩沖區數據都會丟失。

  關於這個問題,下面有幾種解決辦法,供參考:

  ---------

  echo TMOUT=600 >> ~/.bashrc  或    echo TMOUT=600 >> /etc/profile    設置一個超時的秒數,600秒后終端上沒有任何操作便自動斷開連接。

  或者 修改ssh客戶端的配置:給/etc/ssh/ssh_config添加ServerAliveInterval 60

  ---------

一.在Linux server去設置SSH保持連接時間:

  基於安全的理由,如果用戶連線到 SSH Server 后閑置,SSH Server 會在超過特定時間后自動終止 SSH 連線。以下是設定終止連線時間的方法:

  1、打開 /etc/ssh/sshd_config 文件,找到一個參數為 ClientAliveCountMax,它是設定用戶端的 SSH 連線閑置多長時間后自動終止連線的數值,單位為分鍾。

  2、如果這一行最前面有#號,將那個#號刪除,並修改想要的時間。

  3、修改后保存並關閉文件,重新啟動 sshd:

  /etc/rc.d/init.d/sshd restart

  4. vim .bash_profile

  export TMOUT=1000000

  ---------

二.保持ssh連接不斷開

用ssh連接服務端,一段時間不操作或屏幕沒輸出(比如復制文件)的時候,會自動斷開

解決:(2種辦法)
1、在客戶端配置
#vi /etc/ssh/ssh_config(注意不是/etc/ssh/sshd_config文件),后面添加
Host *
ServerAliveInterval 30
這表示要讓所有的ssh連接自動加上此屬性;如果要指定服務端,如下:
使用-o的參數ServerAliveInterval來設置一個防止超時的時間
ssh -o ServerAliveInterval=30 IP地址

2、在服務端配置
編輯服務器 /etc/ssh/sshd_config,最后增加
ClientAliveInterval 60
ClientAliveCountMax 1
這 樣,SSH Server 每 60 秒就會自動發送一個信號給 Client,而等待 Client 回應

  ---------

三.修改server和連接終端

Linux系統server

在linux系統中使用ssh連接遠程服務器時,可以使用-o的一個參數ServerAliveInterval來設置防止超時的時間。

比如:ssh -o serveraliveinterval=60 username@hostIP

服務器配置修改

修改ssh配置文件/etc/ssh/sshd_config,添加或者修改ClientAliveInterval為“ClientAliveInterval 60”。這個參數的是意思是每1分鍾,服務器向客戶端發一個消息,用於保持連接。保存后記得重啟ssh服務。

修改過后,上面幾個辦法都可以讓ssh保持連接,一直處於alive狀態,不會因為沒有操作而被服務器強制斷線了。

 

終端:

使用SecureCRT連接遠程服務器,在會話選項 -> 終端設置中勾選“發送協議 NO-OP”。

使用putty連接遠程服務器,找到Connection -> Seconds between keepalives ( 0 to turn off ), 默認為0,改為60。

 

  ---------

 四.如何退出退出無響應的 SSH 連接

有時候會發現 ssh 掛在那里沒有響應了,可能是客戶端的問題,也可能是服務器端的問題,也可能是客戶端和服務器之間的網絡問題;可能是客戶端電腦休眠后連接斷了、可能是網絡斷了、可能是 WiFi 信號不好、可能是網絡延遲大了、可能是服務器掛了、也可能是服務器上的 sshd 進程掛了,…,可能是技術問題,也可能是非技術問題,可以找出無數可能。

有時我們離開辦公桌前忘了退出 ssh 會話,或者工作的時候長時間 ssh 到服務器上忘記斷開,之后發現那些沒退出的 ssh 會話還掛在那里,無法退出、無法 Ctrl+C、無法做任何操作。通常我們就直接關閉 Terminal 后重新開一個新的;如果用的不是圖形系統,沒有窗口可以關閉,那還要啟用另一個終端找到相關進程后 kill 掉。這里有一個小技巧,在那些沒退出的 ssh 會話里用 ~. “優雅” 的斷開連接。

可以這樣操作:先 按“回車” 換行 再 按“shift + ` ”再按 “. ”

我們man 一下 ssh來看看:

  其實Linux本身已經提供了很多便利的操作,只是我們需要多學習。

  ---------

   附錄:附上之前我寫的那句簡單粗暴的命令,反思一下。

  kill -9 `ps -ef |grep ssh |grep StrictHostKeyChecking | awk '{print $2}'`

  ---------

  20161215 11:35 @西安航天基地

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM