这是我在这里的第一个问题。我是 bash 脚本的新手。我有一个服务器,我正在寻找一种方法来通知所有失败的 ssh 尝试并每天给我发送一封邮件。我正在使用 Centos 6.3。
我正在寻找编写一个脚本,以便在午夜自动发送一封邮件,其中包含当天所有失败的尝试。为此,我认为我需要设置一个 cron 作业。那部分很清楚。就 bah 脚本而言,我的脚本如下:
chkssh(){
thismonth=$(date | awk {'print $2'})
thisdate=$(date | awk {'print $3'})
today=$thismonth" "$thisdate
cat /var/log/secure | grep ssh | grep Failed | grep "$today" | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | sort -n > /usr/local/temp/tempssh.txt
prev_ip=$(cat /usr/local/temp/tempssh.txt| head -1)
count=0
while read this_ip
do
if [ $prev_ip == $this_ip ];then
count=$((count+1))
prev_ip=$this_ip
else
echo "$count failed attempts from $prev_ip" >> /usr/local/temp/todayssh.txt
count=1
prev_ip=$this_ip
fi
done < /usr/local/temp/tempssh.txt
rm -rf /usr/local/temp/tempssh.txt
mail -r Monitor@mytestname.com -s "Daily Failed SSH reports" me@mytestname.com </usr/local/temp/todayssh.txt
这似乎正在发送除尝试 ssh 到服务器的最后一个 IP 之外的所有 IP。例如,如果有 3 个 ips 和每个 2 次尝试,我的输出显示在第一个 2 上,最后一个总是被跳过。关于我错过了什么的任何想法?
提前致谢