![如何通过 bash 检测当前会话是否为 SSH 会话?](https://linux22.com/image/863684/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20bash%20%E6%A3%80%E6%B5%8B%E5%BD%93%E5%89%8D%E4%BC%9A%E8%AF%9D%E6%98%AF%E5%90%A6%E4%B8%BA%20SSH%20%E4%BC%9A%E8%AF%9D%EF%BC%9F.png)
我想检测当前用户会话是否来自 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 的一个得到很好解答的问题。