12

我有一个令我困惑的问题,我想知道是否有人试图实现以下目标:

假设这是我在 Linux 环境中执行“最后一个”命令的结果:

root  pts/1        192.168.1.10      Wed Feb 10 07:04 - 07:57  (00:52)  
root  pts/2                          Tue Feb  9 22:00 - 00:13  (02:13)   

如果“root”用户已从 192.168.1.10 登录,我如何设置特定操作(例如修改 MOTD 或发送电子邮件)。有没有办法捕获这些信息?

这个问题的第二部分是,我怎样才能使上述检查更加稳健 - 即如果我有以下内容:

mary  pts/1        192.168.1.10      Wed Feb 10 07:04 - 07:57  (00:52)  
bob   pts/2                          Tue Feb  9 22:00 - 00:13  (02:13)      

现在,如果用户名等于“mary”并且主机是 192.168.1.10,我想执行一个操作。

欢迎任何建议。

先感谢您。

4

6 回答 6

23

有一个特殊文件/etc/ssh/sshrc,您可以在其中放置一些命令,每次有人通过ssh. 我为你写的:

#!/bin/bash

mail=user@domain.tld
monitored_user=root
monitored_ip=x.x.x.x

hostname=$(hostname)

# add a welcome message:
printf >&2 "\nWelcome on $hostname $USER\n"

read -d " " ip <<< $SSH_CONNECTION

[[ $ip == $monitored_ip && $USER == $monitored_user ]] || exit 0

date=$(date "+%d.%m.%Y %Hh%M")
reverse=$(dig -x $ip +short)

mail -s "Connexion of $USER on $hostname" $mail <<EOF

IP: $ip
Reverse: $reverse
Date: $date
EOF

将此脚本放入文件中,然后将脚本的完整路径放入/etc/ssh/sshrc

man ssh

/etc/ssh/sshrc :此文件中的命令在用户登录时由 ssh 执行,就在用户的 shell(或命令)启动之前。有关更多信息,请参阅 sshd(8) 手册页。

于 2012-10-08T20:15:09.913 回答
1

感谢您的回复。最终,我设法找到了一个暂时可行的解决方案,但它确实存在一个缺陷,我将在一分钟内指出。

我已将以下内容添加到我的 /etc/bashrc 文件(或 /etc/bash.bashrc 任何您使用的环境):

HOST="192.168.0.1"
RHOST=`who am i | sed -n 's/.*(\([^) ]*\).*/\1/p; 1q'`
if [ "$RHOST" == "$HOST" ]; then
        echo "SAY WHAT!"
        #add further actions here if needed
fi

我之前所说的缺陷实际上可能不是缺陷。如果您已经通过 SSH 连接到系统中,并且想要通过 SSH 连接到位于同一 IP 上的主机,ssh root@your-host who am i那么可以打印“your-host”,但我认为应该是这样。

不用说,sed可以修改上述语句,以便您也可以捕获用户名,并且您可以扩展该if/else语句以满足您的需要。

再次感谢您的所有回复。

于 2012-10-08T20:18:27.107 回答
0

您可以/etc/profile根据$SSH_CLIENT.

于 2012-10-08T19:47:14.367 回答
0

看起来您正在使用它,last因为它默认读取/var/log/wtmp的是登录记录。该who命令还允许您读取相同的文件,但界面更符合您的需求。

例如:

$ who --ips /var/log/wtmp | grep '^msw.*127.0.0.1'
msw      pts/2        2012-10-07 15:52 127.0.0.1
msw      pts/3        2012-10-07 15:55 127.0.0.1

这些会话都不是活动的,而是历史性的和记录的。

于 2012-10-08T19:59:38.660 回答
0

在ubuntu中我放了一个脚本

/etc/profile.d

当某人(用户 ssh)登录时,它会向我的邮箱发送一封电子邮件

#/etc/profile.d/run_on_loggin.sh
echo $(who i am) | mail -s 'SSH Login Notification' mymail@hotmail.com

我想用 smtp 创建一个 php 文件,用我的邮件向我发送电子邮件...有时 hotmail 保存在垃圾邮件中...

如果我有 php 文件,我将像这样运行...

如果我想将 var 传递给文件 php 像这样运行...

原谅我的英语:3

注意:我认为这个命令是从用户运行的,如果用户没有使用某些命令或发送电子邮件的权限,请小心。

于 2017-06-03T03:50:29.800 回答
-1

一种方法是定期运行一个简单的脚本:

#!/bin/bash
users=$(last | sed -ne '/192\.168\.1\.10/ s/\([^ ]*\).*/\1/p')
for user in $users; do
    sendmail "$user" < email.txt
done

这会将最后一个命令通过管道传输到 sed 以提取用户列表并将其保存到变量$users. sed 命令使用该-n标志,因此它只打印我们告诉它的内容。首先,我们选择包含指定 IP 和/192\.168\.1\.10/“地址”的行。在这些行中,我们尝试提取空格前的字符,如果成功,我们将打印结果。

然后,我们可以遍历$users变量并采取相应的行动。

重复调用它的一种方法是通过 cron,而更简单的方法是执行while true; do ./my_script.bash; sleep 60; done.

于 2012-10-08T19:38:55.363 回答