我想查看我是否通过 ssh 连接或运行本地终端。
如果我只是通过 ssh 进入服务器而不更改为 root sudo
,这很容易。任何变量$SSH_CLIENT
、$SSH_CONNECTION
或$SSH_TTY
都可用于检查是通过 SSH 还是本地连接的。
问题:当我提升到根帐户来sudo -i
执行管理工作时,这两个变量都没有用 - 它们都是空的。
那么,找出连接是本地连接还是通过 SSH 的最佳方法是什么?
编辑:通过接受的答案,很容易得到一个不引人注目的 bash 提示,反映 ssh 状态和权限:
if [ "$color_prompt" = yes ]; then
# when system is accessed via SSH, hostname with light grey background
if [[ $(pstree -s $$) = *sshd* ]]; then sshbg="\[\033[48;5;7m\]"; fi
# when used as root, change username to orange and '#' to red for prompt
if [ $(id -u) -eq 0 ]; then usercol="\[\033[38;5;3m\]"; hashcol="\[\033[38;5;1m\]"; else usercol="\[\033[38;5;2m\]"; fi
# bash PS1 prompt
PS1="${usercol}\u\[$(tput sgr0)\]@\[$(tput sgr0)\]\[\033[38;5;4m\]${sshbg}\h\[$(tput sgr0)\]:\[$(tput sgr0)\]\[\033[38;5;6m\]\w\[$(tput sgr0)\]${hashcol}\\$ \[$(tput sgr0)\]"
unset sshbg rootcol hashcol
fi
该部件的定时版本pstree
运行时间不到 20 毫秒,因此可以在不引入明显延迟的情况下使用。
答案1
如果您在 bash shell 中,您可以执行pstree -s $$
($$ 是当前 shell 的 PID) 并在输出中查找“sshd”。
答案2
您还可以使用:
who am i | awk -F' ' '{print $2}'
如果它显示 pts/0、pts/1 等,则说明您使用的是 SSH,如果它显示 tty1、tty2 等,则说明您使用的是本地连接。
当我使用 SSH 连接时,我获得以下信息who am i
:
am pts/0 2020-08-28 12:33 (172.17.0.5)
也许 IP 地址也可以用作区分 SSH 连接和桌面上的本地连接的指标。
这里也解释一下:如何检查我当前正在使用哪个 tty?。