我想检测当前用户会话是否来自 SSH 连接 - 也就是说,用户是否实际坐在托管当前终端的计算机旁,或者是否通过 SSH 远程连接?
有没有简单的方法可以做到这一点,最好是通过 bash 脚本方法?
答案1
一种快捷方式是检查SSH_TTY
变量是否已设置:
$ ssh lab
$ echo $SSH_TTY
/dev/pts/22
设置了一些与 SSH 相关的变量。另外两个是SSH_CLIENT
和SSH_CONNECTION
。它们都可以使用。
另一种方法是检查祖先进程是否是sshd
守护进程:
$ pstree -ps $$
init(1)───sshd(1170)───sshd(14153)───sshd(14225)───bash(24232)───pstree(27281)
相关阅读:
- 我如何检测 shell 是否由 SSH 控制?- 关于 Unix 和 Linux 的一个得到很好解答的问题。