在使用“sudo”提升到 root 帐户后,是否可以检查连接是本地连接还是通过 ssh 连接?

在使用“sudo”提升到 root 帐户后,是否可以检查连接是本地连接还是通过 ssh 连接?

我想查看我是否通过 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?

相关内容