使用ssh知道哪个IP在linux中执行了某个命令

Man*_*han 11 linux ssh bash command-history

许多用户使用 ssh 访问一个服务器。我试图找出哪个用户执行了某个命令。

我可以知道当前访问服务器的用户列表,who 我也会知道使用history.

但是如何知道哪个用户cp file1.sh file2.sh在服务器中执行了命令?用户已执行命令并退出

Dan*_*son 4

每个新用户连接都会生成一个sshd具有特定 PID 的新会话。您可以使用pstree打印哪些命令是从哪个sshd会话继承的,然后在/var/log/auth.log.

示例(匿名):我使用同一远程用户登录到具有 3 个并发会话的远程服务器。我现在想找出运行该命令的客户端来自哪个 IP watch date

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log
Run Code Online (Sandbox Code Playgroud)

pstree -p显示该watch命令是从sshdPID 15243继承的grep。对此 PID 进行 ing/var/auth/auth.log显示启动此会话的是 IP 12.34.56.78。所以这也是启动的用户watch

至于history专门查找该用户,从我所看到的情况来看,当所有远程用户都使用相同的本地 SSH 用户时,这是无法完成的。此外,它很容易被欺骗/失活/等等,所以它并不真正可靠。如果它保存到历史文件中,那么您只需查找该cp命令并在文件中向后查找即可,但如果它不存在,则无需执行太多操作。