Ssh

如何檢測 shell 是否受 SSH 控制?

  • January 11, 2022

我想從 shell 腳本(更具體地說是 .zshrc)中檢測它是否是通過 SSH 控制的。我嘗試了 HOST 變數,但它始終是執行 shell 的電腦的名稱。我可以訪問來自 SSH 會話的主機名嗎?比較兩者將解決我的問題。

每次登錄時都會顯示一條消息,說明上次登錄時間和主機:

Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1
Last login: Fri Mar 18 23:11:56 2011 from max

這意味著伺服器具有此資訊。

以下是我在我的 中使用的標準~/.profile

  • 如果其中一個變數SSH_CLIENTSSH_TTY已定義,則它是一個 ssh 會話。
  • 如果登錄 shell 的父程序名稱是sshd,則它是一個 ssh 會話。
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
 SESSION_TYPE=remote/ssh
# many other tests omitted
else
 case $(ps -o comm= -p "$PPID") in
   sshd|*/sshd) SESSION_TYPE=remote/ssh;;
 esac
fi

(為什麼要在 shell 配置而不是會話啟動中進行測試?)

您應該能夠通過SSH_TTYSSH_CONNECTIONSSH_CLIENT變數進行檢查。

引用自:https://unix.stackexchange.com/questions/9605