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


10

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

我可以知道当前正在使用来访问服务器的用户列表。我也可以知道使用来who 执行的命令列表history

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

Answers:


4

每个新的用户连接都会产生一个sshd具有特定PID 的新会话。您可以pstree用来打印从哪个sshd会话继承的命令,然后在中交叉检查此PID /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

pstree -p显示该watch命令是从sshdPID 15243 继承的grep。对此PID的/var/auth/auth.log显示表明,开始此会话的是IP 12.34.56.78。因此,这也是开始的用户watch

至于history专门针对该用户的查找,当所有远程用户都使用同一本地SSH用户时,我无法看到它。另外,它很容易被欺骗/灭活等,因此并不是很可靠。如果将其保存到历史记录文件中,则只需cp在该文件中查找该命令并向后看即可,但是如果该命令不存在,则没有太多事情要做。


它说这个错误grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan

@ManuKMohan:您尚未说明正在使用哪个系统。在RHEL / Fedora / Scientific Linux /等下,相关文件为/var/log/secure
丹尼尔·安德森

Anderson我正在使用Ubuntu
Manu K Mohan 2013年

@ManuKMohan:如果/var/log/auth.log.1存在等,请尝试使用它们,以查看它们是否包含信息。之后,重新启动rsyslogsudo service rsyslog restart),看看它是否开始填充auth.log,它应该已经在做。在Ubuntu中SSHD /var/log/auth.log默认情况下会记录日志,因此,除非您通过/etc/ssh/ssd_config/etc/syslog.conf(可以auth在此处检查级别所记录到的文件)显式更改了记录目标,否则它应该在那里。如果不是:出现问题:-)。
Daniel Andersson

1

您可以将这两行添加到/ etc / profile或/ etc / bashrc中,以便记录bash执行的所有命令:

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

这将使用syslog记录每个执行的命令以及执行该命令的用户及其IP地址,格式如下:

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

另外,您可以将以下行添加到syslog配置(/etc/syslog.conf)中,以将local3消息重定向到特定文件。

local3.*                                                /var/log/prompt.log

现在,它已syslog-ng作为改进,配置文件为/etc/syslog-ng/syslog-ng.conf
蒂莫

1

您可以为此使用史努比

您必须通过在日志消息格式的定义中指定IP =%{env:SSH_CLIENT},将其配置为记录自定义环境变量(SSH_CLIENT)(./ configure标志或从2.x版本开始可在snoopy.ini中进行配置)。

披露:史努比维护者在这里。


0

假设您正在使用bash,history则只会显示您的命令行历史记录。默认情况下,它将读取~/.bash_history历史记录。请注意,可以通过执行类似的操作来更改(尽管可能性很小)HISTFILE=/home/userFoo/.my_alt_history

假设您是root用户,则可以扫描所有用户目录并阅读其历史记录,以查看谁在运行该命令。


哦,如果他们在作恶,他们可以轻松地从历史中删除此命令。如果他们在运行命令的框上处于活动状态,则可以使用ps -aux | grep "cp file1.sh file2.sh"

所有用户都使用ssh远程访问服务器的相同用户名。我想知道哪个IP已访问该用户并执行了命令。
Manu K Mohan 2013年

有很多用户共享用户名和密码不是一个好策略。
pjc50 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.