[轉]如何關閉一個不活動的或者空閒的 SSH 會話

dirgo發表於2024-06-12

原文地址:技術|如何關閉一個不活動的或者空閒的 SSH 會話

作者: Magesh Maruthamuthu 譯者: LCTT wcnnbdk1

| 2017-07-06 09:13 評論: 2 收藏: 2

讓我們來假設一下,當你透過 ssh 在伺服器上工作時,由於網路、電源或者是本地 PC 重啟等原因會導致你的會話連線斷開。

你可能會再次登入伺服器繼續工作也可能不會,但是你始終會留下之前沒有關閉的 ssh 會話。

如何關閉一個不活動的 ssh 會話?首先使用 w 命令來識別出不活動或者是空閒的 ssh 會話,接著使用 pstree 命令來獲取空閒會話的 PID,最後就是使用 kill 命令來關閉會話了。

  • 建議閱讀:Mosh(Mobile Shell)- 最好的SSH 遠端連線替代選項

如何識別不活動的或者是空閒的 SSH 會話

登入系統透過 w 命令來檢視當前有多少使用者登入著。如果你識別出了自己的會話連線就可以記下其它不活動或者是空閒的 ssh 會話去關閉。

在我當前的例子中,能看見兩個使用者登入著,其中一個是我當前在執行 w 命令的 ssh 會話另一個就是之前的空閒會話了。

  1. # w
  2. 10:36:39 up 26 days, 20:29, 2 users, load average: 0.00, 0.02, 0.00
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. root pts/0 219.91.219.14 10:34 28.00s 0.00s 0.00s -bash
  5. root pts/2 219.91.219.14 10:36 0.00s 0.00s 0.00s w

如何獲取 SSH 會話的 PID

為了關閉空閒的 ssh 會話,我們需要空閒會話程序的父程序的 PID。我們可以執行 pstree 命令來檢視包括了所有程序的樹狀圖,以便獲取父程序的 pid。

你會獲得與下方示例中相似的輸出。pstree 命令的輸出會比這個多得多,為了更好的理解我刪去了許多不相關的內容。

  1. # pstree -p
  2. init(1)-+-abrtd(2131)
  3. |-acpid(1958)
  4. |-httpd(32413)-+-httpd(32442)
  5. |
  6. |-mingetty(2198)
  7. |-mysqld_safe(24298)---mysqld(24376)-+-{mysqld}(24378)
  8. |
  9. |-php(32456)-+-php(32457)
  10. |
  11. |-sshd(2023)-+-sshd(10132)---bash(10136)
  12. | `-sshd(10199)---bash(10208)---pstree(10226)
  13. |-udevd(774)-+-udevd(2191)
  14. `-udevd(27282)

從上方的輸出中,你可以看到 sshd 程序與分支的樹形圖。sshd 的主程序是 sshd(2023),另兩個分支分別為 sshd(10132)sshd(10199)

跟我在文章開始講的相同,其中一個是我新的會話連線 sshd(10199) 它展示了我正在執行的 pstree 命令,因此空閒會話是另一個程序為 sshd(10132)

  • 建議閱讀:如何透過標準的網頁瀏覽器來接入 Secure Shell (SSH) 伺服器
  • 建議閱讀:PSSH - 在多臺 Linux 伺服器上並行的執行命令

如何關閉空閒 SSH 會話

我們已經獲得了有關空閒會話的所有資訊。那麼,就讓我們來使用 kill 命令來關閉空閒會話。請確認你將下方的 PID 替換成了你伺服器上的空閒會話 PID。

  1. # kill -9 10132

(LCTT 譯註:這裡介紹另一個工具 pkill,使用 pkill -t pts/0 -kill 就可以關閉會話, debian 8 下可用,有些版本似乎需要更改 -kill 的位置)

再次檢視空閒會話是否已經被關閉

再次使用 w 命令來檢視空閒會話是否已經被關閉。沒錯,只有那個我自己的當前會話還在,因此那個空閒會話已經被關閉了。

  1. # w
  2. 10:40:18 up 26 days, 20:33, 1 user, load average: 0.11, 0.04, 0.01
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. root pts/2 219.91.219.14 10:36 0.00s 0.00s 0.00s w
  • 建議閱讀:rtop - 一個好用的透過 SSH 來監控遠端伺服器的工具
  • 建議閱讀:DSH - 同時在多臺 Linux 伺服器上執行命令

再次使用 pstree 命令檢查

再次使用 pstree 命令確認。是的,只有那個我自己的 ssh 會話還在。

  1. # pstree -p
  2. init(1)-+-abrtd(2131)
  3. |-acpid(1958)
  4. |
  5. |-httpd(32413)-+-httpd(32442)
  6. |
  7. |-mingetty(2198)
  8. |-mysqld_safe(24298)---mysqld(24376)-+-{mysqld}(24378)
  9. |
  10. |-php(32456)-+-php(32457)
  11. |
  12. |-sshd(2023)---sshd(10199)---bash(10208)---pstree(10431)
  13. |-udevd(774)-+-udevd(2191)
  14. `-udevd(27282)

via: http://www.2daygeek.com/kill-inactive-idle-ssh-sessions/

作者:Magesh Maruthamuthu 譯者:wcnnbdk1 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章