Ssh
如何檢測 shell 是否受 SSH 控制?
我想從 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_CLIENT
或SSH_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_TTY
、SSH_CONNECTION
或SSH_CLIENT
變數進行檢查。