如果我的操作系统有多个通过 ssh 登录的用户,有什么方法可以找到与每个 /dev/pts/N 关联的物理机(其中 N 是整数)?我所知道的是
WHO
和
辅助键
将显示哪个用户或进程与设备文件关联的命令,但我可以获得有关用户/进程来自的物理机的更多信息吗?也许是一个IP?
答案1
SSH(和mosh)实际上填充utmp
/wtmp
文件,例如who
并last
读取一些有用的信息,包括远程IP地址。
~$ who
...
ilkkachu pts/26 2022-05-03 16:27 (127.0.0.1)
$ last -1a
ilkkachu pts/26 Tue May 3 16:27 still logged in 127.0.0.1
尽管您可能想要 grep 获取正确的 tty 名称:
$ who | grep "pts/26"
ilkkachu pts/26 2022-05-03 16:27 (127.0.0.1)
或者,您可以追踪打开文件的列表,以查找在 tty 上持有 fd 的 SSH 进程,然后找到相应的网络套接字。
答案2
伪终端不与“物理机”关联。它与正在运行的进程相关联(例如,ssh 会话、GUI 终端窗口、screen/tmux 中的窗口等)。您可以用来ps
查找哪些进程正在使用给定的pts
设备,并可能从那里回溯。
对于您想要执行的操作,ss
(或netstat
) 命令可能更有用。例如,我可以通过运行以下命令来查找与活动 ssh 连接关联的远程地址:
$ ss -tnp | grep sshd | grep ESTAB
ESTAB 0 0 192.168.1.200:22 1.2.3.4:39240 users:(("sshd",pid=2706,fd=3))
ESTAB 0 0 192.168.1.200:22 4.3.2.1:39242 users:(("sshd",pid=2809,fd=3),("sshd",pid=2771,fd=3))