我有一个困扰我的问题,我想知道是否有人试图实现以下目标:
我们假设这是我在Linux环境中使用'last'命令的结果:
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时执行操作。
欢迎任何建议。
提前谢谢。
答案 0 :(得分:17)
有一个特殊文件/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)手册页了解更多信息。
答案 1 :(得分: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
然后打印“你的主机”,但我认为这是应该是这样的。
毋庸置疑,可以修改上述sed
语句,以便您也可以捕获用户名,并且可以扩展if/else
语句以满足您的需求。
再次感谢您的回复。
答案 2 :(得分:0)
一种方法是定期运行一个简单的脚本:
#!/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
。
答案 3 :(得分:0)
您可以根据/etc/profile
的值向$SSH_CLIENT
或等效内容添加内容。
答案 4 :(得分: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
这些会话都不是活跃的,而是历史性的和记录的。
答案 5 :(得分: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文件,我会像this ...
一样运行如果我想将var传递给文件php运行,如this ...
原谅我的英语:3
注意:我认为此命令是从用户运行的,如果用户没有权限使用某些命令或发送电子邮件,请小心。