如何确定我是否通过 SSH 登录?

如何确定我是否通过 SSH 登录?

我目前正在设置一个相当复杂的 bash 配置,该配置将在多台机器上使用。我试图找出是否可以确定我是通过 SSH 还是在本地机器上登录。这样,我可以根据这一事实设置一些别名。比如别名haltrestart停止远程服务器可能不是最好的选择。

到目前为止,我知道的是,SSH_CLIENT当我通过 ssh 登录时,环境变量已设置。不幸的是,当我使用 启动超级用户 shell 时,此变量会被丢弃sudo -s。我还知道我可以将一个参数传递给 sudo,指示 sudo 将我的所有环境变量复制到新的 shell 环境,但如果我不想这样做,还有其他方法吗?

答案1

您可以使用“w”或“who”命令输出。当您通过 ssh 连接时,它们将显示您的源 IP。

答案2

这是我在unix.stackexchange


  • 如果定义了其中一个变量SSH_CLIENT或,则它是一个 ssh 会话。SSH_TTY
  • 可以使用 检查登录 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

答案3

您可以添加SSH_*env_keepsudoers以便在切换到其他用户时可以检测到这一点。

答案4

是的,正如其他人指出的那样,该信息存在于输出中括号中的您的 IP 中who am i

您可以使用 Bash 正则表达式来检测它:

if [[ $(who am i) =~ \([0-9\.]+\)$ ]]; then echo SSH; else echo no; fi

相关内容