題 避免ssh連接超時和凍結GNOME終端的方法


當我通過ssh連接到某些服務器時,它超時並“凍結”終端(不接受輸入,不斷開連接,不能用Ctrl-C來殺死ssh進程或任何東西)。

這是在Ubuntu的 gnome-terminal 雖然它似乎暫停終端輸入/輸出,並且不影響GNOME終端軟件本身的操作。所以少了一個bug gnome-terminal 而不是與ssh的惱人的不一致。

那麼,有沒有辦法防止/重新獲得超時的ssh連接終端?


219
2018-01-20 23:33


起源


可能重複 如何可靠地保持SSH隧道打開? - Murmel


答案:


sshd(服務器)如果一段時間內沒有從客戶端聽到任何聲音,則關閉連接。您可以告訴您的客戶偶爾向服務器發送生命信號。

此配置位於文件中 ~/.ssh/config。 要每隔四分鐘將信號發送到remotehost, 把以下內容放入你的 ~/.ssh/config

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

這就是我的 ~/.ssh/config

要為所有主機啟用它,請使用:

Host *
  ServerAliveInterval 240

還要確保運行 chmod 600 ~/.ssh/config,因為配置文件不能是世界可讀的。


247
2018-01-20 23:53



謝謝sblair幫助我的措辭,非常感謝。我將“不應該”更改回“絕不”,因為ssh會檢查文件的權限,如果它是世界或組可讀,則會失敗。 - Ludwig Weinzierl
這不是OP所要求的。由於不活動,他沒有被踢掉。他正試圖連接,他的終端正在凍結。 - Cerin
這是哪裡 ~/.ssh/config? - User
@User'〜/'代表您的主文件夾。 '.ssh'是您的主文件夾中的文件夾。 - wkm
如果您的連接實際丟失,這是沒用的... - so12311


輸入 一個接一個斷開與凍結會話的連接。

ssh手冊頁中的“ESCAPE CHARACTERS”部分解釋了底層細節。


234
2018-01-20 23:44



在我看來,這個答案可以更準確地回答這個問題,無論如何,我正在尋找答案。 - CoatedMoose
請注意,您需要取消註釋該行 EscapeChar ~ 在 /etc/ssh/ssh_config (要么 ~/.ssh/ssh_config 如果你更喜歡)。 - Aditya M P
@adityamenon不, EscapeChar ~ 已經是內置默認值。 - Peter Eisentraut
@Mark問題是“有沒有辦法阻止終端從ssh連接重新獲得 已經超時了?“強調我的。 - CoatedMoose
雖然在問題的背景下它是不正確的,但這正是我想要的。 - Subin Sebastian


即使這不是你問題的直接答案,它也與你所遇到的問題密切相關。您可以使用終端多路復用器,而不是嘗試保持連接處於活動狀態(所有連接最終都會死亡) screen 和 tmux 即使終端斷開連接,也能使會話在後台保持活動狀態。

基本上當您登錄SSH服務器時,您會立即運行 screen 這將創建並附加一個新會話:

$ screen

然後你就像往常一樣繼續使用shell。現在,如果連接斷開,當您可以重新聯機並通過SSH重新連接到服務器時,您將獲得當前會話的列表:

$ screen -ls

要重新連接到會話:

$ screen -r <session>

哪裡 <session> 是PID或會話名稱。您將重新連接到您的會話,您可以從您離開的地方繼續!

您甚至可以分離會話並從家中重新連接以從您離開的確切位置接聽。分離您使用的會話 C-a 其次是 C-d (那是 Control + A 然後 Control + D)。

簡單的在線教程 同樣。

運用 screen 和 tmux 在遠程服務器上被認為是 最佳實踐 並且是 強烈推薦。有些人甚至都有 screen 作為他們的默認登錄shell,所以當他們連接時,他們立即開始新的 screen 會話。


38
2017-07-03 01:28



另一種選擇是使用mosh: mosh.mit.edu - Zombies
如果您使用偶爾會丟失的熱點或WiFi,這將特別有用。 - Randall


嘗試追加 -o ServerAliveInterval=30 到您的連接字符串(30 意味著30秒,當然可以調整)


11
2018-02-06 14:13





您也可以從SSH服務器端設置空閒超時時間間隔:

文件: /etc/ssh/ssh_config

內容:

ClientAliveInterval XX
ClientAliveCountMax YY

這與客戶端設置的工作方式完全相同,但是從服務器而不是客戶端發送空數據包。

摘自:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


5
2018-02-12 22:45





對於想要阻止客戶端首先超時的人。

你可以嘗試設置 ConnectTimeout 0 在配置文件中。值0表示連接將無限期保持活動,除非關閉。

您的配置(或ssh_config)文件可能如下所示:

Host *
   ConnectTimeout 0

1
2017-12-17 02:19