Linux

如何確定我是否通過 SSH 登錄?

  • December 30, 2021

我目前正在設置一個相當複雜的 bash 配置,應該在多台機器上使用。我試圖找出是否可以確定我是通過 SSH 登錄還是在本地電腦上登錄。例如,通過這種方式,我可以根據該事實設置一些別名。就像別名一樣haltrestart因為停止遠端伺服器可能不是最好的事情。

到目前為止我所知道的是,環境變數SSH_CLIENT是在我通過 ssh 登錄時設置的。不幸的是,當我使用sudo -s. 我也知道我可以向 sudo 傳遞一個參數,指示 sudo 將我所有的環境變數複製到新的 shell 環境中,但是如果我不想這樣做,還有其他方法嗎?

您可以使用“w”或“who”命令輸出。當您通過 ssh 連接時,它們會顯示您的源 IP。

這是我在unix.stackexchange上找到的一個很好的答案:


  • 如果其中一個變數SSH_CLIENTSSH_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

引用自:https://serverfault.com/questions/187712