实验室新配了服务器,之前的服务器设置了IP变化时(一般为电脑重启时)自动发送IP至指定邮箱,但没有记录方法,此次重新配置记录一下
ubuntu定时检测IP变化并发送邮件查看IP
1、安装ssmtp服务
sudo apt-get install ssmtp mailutils
发送邮件需要有mailutils基础库,ssmtp库可以进一步选择发送人,收件人,邮件主题,邮件内容等。
2、开通邮箱smtp服务
需要开通发件人邮箱的smtp服务,无论是qq邮箱还是163邮箱等都可以直接开通,我选择的是qq邮箱,具体步骤可以参考:https://jingyan.baidu.com/article/6079ad0eb14aaa28fe86db5a.html
开通后即可获得邮箱账号的smtp的授权码,为一串英文乱码。
3、配置ssmtp
3.1、设置ubuntu发件人信息
首先更改文件/etc/ssmtp/ssmtp.conf,编辑器选择自己常用的,我用的是vim
sudo vim /etc/ssmtp/ssmtp.conf
进入文件后默认显示如下:
修改其中未注释信息如下:
即mailhub修改为qq邮箱的smtp服务器和端口,smtp.qq.com:465
,如果发件人使用的是163邮箱,则163邮箱的服务器和端口自行百度,可能是smtp.163.com:465
;
hostname保持不变;
接着输入:
UseTLS=Yes
root=*********@qq.com
AuthUser=*********
AuthPass=******************
root后的邮箱为发件人邮箱,AuthUser后为发件人账号,即邮箱去掉后缀(例如@qq.com),AuthPass后为之前申请所得的smtp授权码。
保存退出(:wq)
3.2、配置ssmtp用户使用权限
即配置允许哪个ubuntu用户可以使用发件人邮箱发送邮件。
更改文件/etc/ssmtp/revaliases:
sudo vim /etc/ssmtp/revaliases
打开默认为:
在下方添加如下:
root:*********@qq.com:smtp.qq.com:465
lab532:*********@qq.com:smtp.qq.com:465
即格式为:用户:邮箱:smtp.qq.com:465
,163邮箱更改对应位置即可。
这样配置即允许root用户和指定用户(如我的为lab532)使用ssmtp服务发送邮件。
ssmtp配置完成。
3.3、简单测试
echo "hello world" | mail -s "title" *********@163.com
输入上述命令,后面邮箱为收件人邮箱,可以任意指定,收到邮件,测试成功。
4、crontab命令定时循环执行检测脚本发送邮件
4.1、检测IP脚本
脚本作用:运行脚本时会获取当前IP地址,并与之前保存的IP地址进行比较,如相同,则结束脚本,如不同,则将新的IP保存下来并发送邮箱给指定收件人。
在/home/lab532/auto_scripts/目录下添加getip.sh脚本,目录和脚本名字可自己指定,我的是上述情况:
#!/bin/bash
MYIP=`ifconfig ppp0 | grep 'inet '| awk '{print $2}' | cut -d ':' -f 2`
TIME=`env LC_TIME=en_US.UTF-8 date`
LASTIPFILE='/home/lab532/auto_scripts/.last_ip_addr'
LASTIP=`cat ${LASTIPFILE}`
EmailFile='/home/lab532/auto_scripts/emai_info.txt'
if [[ ${MYIP} != ${LASTIP} ]]; then
echo -e "To: *********@qq.com\nFrom: *********@qq.com\nSubject: Lab532 New IP\n\nHello!\n\nCurrent Time:${TIME}\nNew IP:${MYIP}" > ${EmailFile};
/usr/sbin/ssmtp *********@qq.com < ${EmailFile};
echo ${MYIP} > ${LASTIPFILE};
fi
ifconfig命令找不到,则:
sudo apt install net-tools
脚本中获取IP命令,ubuntu20.04中使用如上,如果使用ubuntu16.04则修改如下:
ifconfig ppp0 | grep 'inet addr'| awk '{print $2}' | cut -d ':' -f 2
其中的ppp0为拨号端口,如果这里不同则也需要更改这里
脚本中的To后面的邮箱是收件人邮箱,课任意指定,From后面的邮箱和ssmtp后面的邮箱是发件人邮箱,需要和前面有授权码的发件人邮箱保持一致,subject的为邮件主题,可自己更改,后面的为内容可自己更改,但需要保留${MYIP}
变量,发送多个邮件在后面echo ${MYIP} > ${LASTIPFILE};
命令前多复制几次发送命令即可,即:
echo -e "To: *********@qq.com\nFrom: *********@qq.com\nSubject: Lab532 New IP\n\nHello!\n\nCurrent Time:${TIME}\nNew IP:${MYIP}" > ${EmailFile};
/usr/sbin/ssmtp *********@qq.com < ${EmailFile};
echo -e "To: *********@163.com\nFrom: *********@qq.com\nSubject: Lab532 New IP\n\nHello!\n\nCurrent Time:${TIME}\nNew IP:${MYIP}" > ${EmailFile};
/usr/sbin/ssmtp *********@163.com < ${EmailFile};
等等。
4.2、crontab定时循环执行脚本
在之前配置的用户权限中允许的用户下,输入如下命令:
crontab -e
添加如下命令:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/2 * * * * /bin/bash /home/lab532/auto_scripts/getip.sh
即可设置为每两分钟执行一次getip.sh脚本,关于crontab的用法可自行百度。
配置完成,等待指定邮箱发送指定内容。