Linux
如何確定我是否通過 SSH 登錄?
我目前正在設置一個相當複雜的 bash 配置,應該在多台機器上使用。我試圖找出是否可以確定我是通過 SSH 登錄還是在本地電腦上登錄。例如,通過這種方式,我可以根據該事實設置一些別名。就像別名一樣
halt
,restart
因為停止遠端伺服器可能不是最好的事情。到目前為止我所知道的是,環境變數
SSH_CLIENT
是在我通過 ssh 登錄時設置的。不幸的是,當我使用sudo -s
. 我也知道我可以向 sudo 傳遞一個參數,指示 sudo 將我所有的環境變數複製到新的 shell 環境中,但是如果我不想這樣做,還有其他方法嗎?
您可以使用“w”或“who”命令輸出。當您通過 ssh 連接時,它們會顯示您的源 IP。
這是我在unix.stackexchange上找到的一個很好的答案:
- 如果其中一個變數
SSH_CLIENT
或SSH_TTY
已定義,則它是一個 ssh 會話。- 登錄 shell 的父程序可以用
ps -o comm= -p $PPID
. 如果是sshd
,則為 ssh 會話。if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then SESSION_TYPE=remote/ssh else case $(ps -o comm= -p $PPID) in sshd|*/sshd) SESSION_TYPE=remote/ssh;; esac fi