Contents

如何在 Linux 上退出無回應的 SSH 會話

您可能正在遠端 SSH 會話中輸入內容,突然間什麼事也沒有發生。系統似乎沒有響應您的按鍵。你做什麼工作?

SSH 會話停滯或無回應的發生可能歸因於多種因素,例如網路中斷、伺服器過載或軟體故障。要終止無回應的會話,可以嘗試多種方法,包括在終端機視窗中使用「kill」命令強制終止連接,或透過啟動 SSH 會話的應用程式關閉所有關聯的連接。在某些情況下,切換到 Mosh 等替代協定可能會提供更有效的解決方案,該協定透過持久隧道和內建 shell 整合提供增強的效能。

是什麼導致 SSH 會話凍結?

SSH 會話無回應的主要原因之一是由於 Wi-Fi 訊號減弱或遠端裝置意外掛起而導致網路連線遺失。這種情況在使用可攜式電腦的使用者中尤其普遍,因為他們在關閉筆記型電腦蓋子或無法保持穩定的網路連線時可能會忽略考慮正在進行的會話。

SSH(Secure Shell)的縮寫,最初是在個人不普遍使用筆記型電腦作為存取網路資源的主要方式的時期提出的。 SSH 的設計和功能經過專門設計,可在透過實體電纜而不是無線傳輸建立連接的環境中實現最佳運作。因此,通常認為與無線網路相比,有線網路使用它更有效。

以轉義序列終止

/bc/images/ssh-escape-quit.jpg

如果您的 Secure Shell (SSH) 連線變得無響應或凍結,適當的做法是使用轉義序列。透過轉義序列執行的操作允許與 SSH 用戶端而不是遠端主機設備進行通訊。 OpenSSH 用戶端上的預設轉義字元需要使用波形符 (~),該符號位於任何給定的轉義序列之前。

若要退出 Secure Shell (SSH) 用戶端,可以使用波浪號符號後面跟著句號(句號),該符號通常與波浪號符號位於同一鍵盤行。

或者,人們可以選擇根據自己的喜好修改轉義字元。為此,只需在執行命令時使用“-e”選項即可。或者,可以透過調整主機系統主目錄中「.ssh/config」檔案中的「EscapeChar」參數來使此變更永久化。

使用kill指令

/bc/images/ps-grep-ssh.jpg

如果使用轉義序列不成功,則可以嘗試透過識別其進程識別碼 (PID) 來終止 SSH 用戶端。這可以透過使用“grep”搜尋來傳遞“ps”命令的輸出來實現:

 ps aux | grep ssh 

顯示進程命令(「ps」)中的「aux」參數表示應列出系統上執行的所有進程,無論其擁有者是誰或是否有關聯的終端。

在管理安全外殼 (SSH) 連線的多個執行個體時,由於缺乏可視指示器,識別活動會話可能會很困難。但是,透過檢查日誌檔案(顯示與每個會話關聯的使用者名稱和 IP 位址等資訊),可以找到目前正在執行的實例。若要中斷非活動會話,只需執行「kill」指令,然後執行所需終止的程序 ID (PID)。

 kill [PID] 

為了更好的 SSH 連接,請使用 Mosh!

/bc/images/mosh-ssh-vim.jpg

避免煩人的凍結 SSH 會話的更好方法是使用 Mosh 。如果連線斷開,Mosh 會讓您保持連線。當您重新連接時,它將發送任何訊息。當您讓機器進入睡眠狀態時它也會起作用。

使用 GNU Screen 或 tmux 等終端多工器時,您能夠在發生中斷時維護並隨後恢復 SSH 會話,從而提供無縫連接。然而,當與 Mosh 結合使用時,它們的功能會進一步增強,從而優化使用者體驗。

要在 Debian 和 Ubuntu 上安裝 Mosh:

 sudo apt install mosh 

在 Arch Linux 上:

 sudo pacman -S mosh 

關於 Red Hat 系列發行版:

 sudo dnf install mosh 

現在您可以擺脫卡住的 SSH 會話

與利用轉義序列或使用「kill」指令等傳統方法相比,Mosh 提供了更有效的解決方案來維護活動的 SSH 會話。儘管連接中斷或不活動一段時間等中斷,該工具仍可提供連續連接,從而消除了通常與無響應 SSH 會話相關的重複重新身份驗證過程的需要。