首页 > 系统 > Linux > 正文

脚本实现SSH登录邮件报警

2019-10-26 18:46:43
字体:
来源:转载
供稿:网友

登录保护是一个非常重要的环节,下面通过图文并茂的方式给大家详细讲解下:


前两天@cyy 给我发了一个图

然后我就想到USHQ的ssh登录app通知功能,然后就像如果把这个部署到自用的服务器就好了。至少多一层安全系数。

首先要感谢@Legion 帮忙搞定了几个错误以及搞定了Geo2IP的JSON转换。 (P.S.此人为自动化运维大神级人物,现任职于德国一数据统计企业。)

当然,我和他相比我就是战五渣了...大家一定要多向 @Legion 学习啊~~

说下需要做的准备:

sendmail或者Postfix
php
bash
CentOS/Debian/Ubuntu
若你的生产环境中没有php sendmail Postfix等组件,请移步:

@Legion: Linux之使用shell脚本实现ssh登录报警

参考文件

首先是报警脚本文件

Shell

#!/bin/sh########################################################################## File Name: Login-alert.sh# Author: Jason# Email: master#deamwork.com# Created Time: Tue Jul 21 2015 21:23:16 PM CST ##########################################################################require jq#wget http://stedolan.github.io/jq/download/linux64/jq -O /usr/local/bin/jq#chmod +x /usr/local/bin/jq#if error, please # following one#PATH=/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin#Geo2IP by Legion(http://www.dwhd.org/)eval `curl -s "http://ip.taobao.com/service/getIpInfo.php?ip=${SSH_CLIENT%% *}" | jq . | awk -F':|[ ]+|"' '{if($3~/^(country|area|region|city|isp)$/){print $3"="$7}}'`#html mail contentcat >> mail-no-base64.html <<EOF#请自行准备邮件模板,以下为可能用到的变量#输出主机名 `hostname`#输出登录端口 ${SSH_CLIENT##* }#输出登录来源IP ${SSH_CLIENT%% *}#输出IP地址归属地 {country}_${area}_${region}_${city}_${isp}#输出登录时间 `date`EOF#Base64 Encodingbase64 mail-no-base64.html > mail-base64.html#使用Sendmail#sendmail -t >/dev/null 2>&1 <<EOF#to:example@example.com#from:Example<example@example.com>#subject:[`hostname`]服务器登录告警#`cat mail-no-base64.html`#EOF#使用postfix#cat >> mail.php <<EOF#<?php#/$to = "example@example.com";#/$subject = "[`hostname`]服务器登录告警";#/$message = "`cat mail-base64.html`";#/$headers = "MIME-Version: 1.0" . "/r/n";#/$headers .= "Content-Type: text/html; charset=/"utf-8/"" . "/r/n";#/$headers .= "Content-Transfer-Encoding: base64" . "/r/n";#/$headers .= 'From: Example<example@example.com>' . "/r/n";#/$send = mail(/$to,/$subject,/$message,/$headers);#if(/$send){echo 'Mail Send Successful.';}else{echo 'Failed.';}#?>#EOF#使用 SMTP (require smtp-class.php)cat >> mail.php <<EOF<?phprequire("smtp-class.php"); /$smtpserver = "smtp.example.com";/$smtpserverport = 25;/$smtpusermail = "example@example.com";/$smtpemailto = "example@example.com";/$smtpuser = "example";/$smtppass = "password";/$mailsubject = "[`hostname`]服务器登录告警";/$mailbody = "`cat mail-base64.html`";/$mailtype = "HTML";/$smtp = new smtp(/$smtpserver,/$smtpserverport,true,/$smtpuser,/$smtppass);/$smtp->debug = TRUE;/$smtp->sendmail(/$smtpemailto, /$smtpusermail, /$mailsubject, /$mailbody, /$mailtype); ?>EOFphp mail.phpyes y | rm mail-no-base64.html mail-base64.html mail.php            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表