我想看看我是通过 ssh 连接还是运行本地终端。
如果我只是 ssh 进入服务器而不通过更改为 root sudo
,这很容易。任何变量$SSH_CLIENT
,$SSH_CONNECTION
或$SSH_TTY
可用于检查一个是通过 SSH 连接还是本地连接。
问题:当我提升到 root 帐户sudo -i
以执行管理任务时,这些变量都没有帮助 - 它们都是空的。
找出连接是本地连接还是通过 SSH 的最佳方法是什么?
编辑:通过接受的答案,很容易有一个反映 ssh 状态和权限的不显眼的 bash 提示:
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 毫秒,因此可以在不引入明显延迟的情况下使用它。
如果您在 bash shell 中,则可以执行
pstree -s $$
($$ 是当前 shell 的 PID)并在输出中查找“sshd”。您还可以使用:
如果它显示 pts/0、pts/1 等,您使用的是 SSH,如果它显示 tty1、tty2 等,您使用的是本地连接。
当我使用 SSH 连接时,我得到以下信息
who am i
:也许 IP 地址也可以用作区分 SSH 连接和桌面上的本地连接的指标。
还在这里解释:如何检查我当前使用的是哪个 tty?.