Email客户端配置
No.1:
概述
-
告警通知是大多数监控软件或运维工具都有的功能,但对于云主机,资源本身就不足,并且还要开相应的服务端口,这里我介绍一种简单的通过脚本实现ssh登录主机邮件通知的方法。
-
关于邮件报警,有很多方案,这里使用稳定性较好的msmtp+mutt方案。原本打算用mailx的,可发送邮件老出问题(可能是我配置问题),弃之。
-
msmtp
- msmtp 是一个SMTP 客户端。
- 在默认情况下,它把邮件送给负责发邮件的SMTP 服务器(如:免费邮箱供应商)。
- 你需要手工建立一个含邮件账号信息的配置文件,并且让MUA(邮件客户端)启用msmtp 而不是/usr/sbin/sendmail ,这样才能使邮件客户端软件与msmtp 更好的协同工作。
-
mutt
- mutt是linux下的一个email程序。
- mutt是一个MUA(邮件用户代理),它跟一般的 Windows 邮件程序不同,它不是一个包罗万象的大杂烩。你甚至会发现它根本不直接发出邮件,它从来不自己编辑邮件,它从来不自己对邮件进行加密和数字签名……
- Mutt 更像一个文件管理器,只不过它管理的是email。它的功能是借助各个最强大的程序来实现的。这符合 UNIX 的设计思想。
No.2:
安装配置
我们只用到发送邮件的功能,其他的功能有兴趣可以自己研究下,这里不做说明
- 安装
- RHEL/CentOS:
# yum install msmtp mutt
- Debian/Ubuntu:
# apt install msmtp mutt
- RHEL/CentOS:
- msmtp配置
- 默认没配置文件,在
/usr/share/doc/msmtp-1.4.32/
目录(CentOS7)下有msmtprc-system.example
和msmtprc-user.example
模板 - 手动创建配置文件,全局配置在
/etc/msmtprc
或某个用户配置在~/.msmtprc
,这里做全局配置(每个用户登录都有提示) - 建议配置文件权限:
/etc/msmtprc
:644
~/.msmtprc
:600
- 默认没配置文件,在
-
msmtprc文件配置示例
- 中文注释部分最好删除,我原本把注释放在各参数后面,结果报错了,另起一行就不报错
msmtp -S
:打印有关服务器的信息(可检查SMTP服务器配置是否正确)- 日志文件权限问题
# chmod 666 /var/log/msmtprclog
# Set default values for all following accounts. defaults #使用TLS加密 tls on tls_starttls off tls_certcheck off #tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile /var/log/msmtprclog # A freemail service account qq #SMTP主机地址 host smtp.exmail.qq.com # SMTP主机端口 port 465 auth login # 由于是企业邮箱,这里就用XXX表示了 from wangxd@mooXXX.com user wangxd@mooXXX.com #有的邮箱是开启SMTP时的授权码;有的是邮箱账号密码;qq企业邮箱用的是密码 password xxxxxxxx # Set a default account account default : qq
- 测试,邮箱本身可以给自己账号发送邮件,这里用接收通知的邮箱也设置成我的企业邮箱
$ echo '告警'|msmtp -v wangxd@mooXXX.com loaded system configuration file /etc/msmtprc 略...... <-- 354 End data with <CR><LF>.<CR><LF> --> 告警 --> . <-- 250 Ok: queued as --> QUIT <-- 221 Bye
- mutt配置
在/etc/Muttrc.local
中添加一下内容set sendmail="/usr/bin/msmtp" set use_from=yes set realname="dream" set from=wangxd@mooXXX.com
No.3:
故障处理
-
异常:msmtp: the server sent an empty reply
解决方法:tls_starttls off -
异常:msmtp: TLS certificate verification failed: the certificate hasn’t got a known issuer
解决方法:证书有误,tls_certcheck off,或者重新创建证书,然后配置证书。 -
异常:msmtp: account zlebank from /usr/local/mutt/etc/msmtprc: tls requires either tls_trust_file (highly recommended) or tls_fingerprint or a disabled tls_certcheck
解决方法:tls_certcheck off,或者创建证书,然后配置证书:
tls_trust_file [你的证书路径] -
异常:msmtp: support for TLS is not compiled in
解决方法:yum -y install gcc gcc-c++ gnutls gnutls-devel gnutls-utils openssl openssl-devel libidn libidn-devel
SSH登录Email提醒
No.1:
获取主机信息
- 获取登录IP:
echo ${SSH_CONNECTION} | awk '{print$1}'
- 可以从"$SSH_CLIENT"变量获取
- 获取登录IP端口:
echo ${SSH_CONNECTION} | awk '{print$2}'
- 可以从"$SSH_CLIENT"变量获取
- 获取服务器的IP:
echo ${SSH_CONNECTION} | awk '{print$3}'
- 获取服务器端口
echo ${SSH_CONNECTION} | awk '{print$4}'
- 获取登录用户:
echo ${LOGNAME}
- 获取登录主机名:
echo ${HOSTNAME} "(" $server_ip ")"
- 获取时间并指定输出格式
echo $(date +"%Y-%m-%d %R")
No.2:
脚本
-
测试OS:RHEL/CentOS 6/7
-
创建脚本
$ cat /etc/ssh/ssh_email.sh #! /bin/bash #-----------------------------------------------------# # # # Author: xingdp # # Time:2017-10-12 13:50:07 # # Name:ssh_email.sh # # Version: V1.0 # # Description:SSH remote online mail reminder # # # #-----------------------------------------------------# if [ -z "${SSH_CONNECTION}" ];then echo '$SSH_CONNECTION:not exists' exit 1 fi # 定义变量 from_ip=`echo ${SSH_CONNECTION} | awk '{print$1}'` from_port=`echo ${SSH_CONNECTION} | awk '{print$2}'` server_ip=`echo ${SSH_CONNECTION} | awk '{print$3}'` user=`echo ${LOGNAME}` hostname_1=`echo ${HOSTNAME} "(" $server_ip ")"` server_time=`echo $(date +"%Y-%m-%d %R")` e_mail=xxxxxx@qq.com # 某IP段不需要提醒 #ip_exit=`echo ${from_ip}|cut -d "." -f 1,2,3` #if [ "${ip_exit}" == "192.168.1" ];then #exit 1 #fi # 某用户不需要提醒 if [ "${user}" == "git" ];then exit 1 fi # 发送邮件 echo -e " *********** 服务器登录提醒 ***********\n 登录主机: ${hostname_1}\n 登录用户: ${user}\n 登录时间: ${server_time}\n 登录IP地址:${from_ip}\n 登录IP端口:${from_port}\n 登录IP区域:\n **************************************"|mutt -s "服务器登录提醒" ${e_mail}
-
创建
/etc/ssh/sshrc
文件# cat /etc/ssh/sshrc bash /etc/ssh/ssh_email.sh
No.2:
测试
- 测试结果:ssh登录主机后,自动发送邮件
- 除了ssh登录邮件通知,还可以配置定时任务执行结果通知、git提交更新通知等,配置方法可以借鉴ssh登录通知。