2024年Ubuntu及类Ubuntu系统下如何配置SSHD+PAM+MSMTP/GMX实现远程登录邮件通知
2024年Ubuntu及类Ubuntu系统下如何配置SSHD+PAM+MSMTP/GMX实现远程登录邮件通知
嘿,最近我为了给工作用的Gmail账号配置远程登录邮件提醒,整整折腾了一天——试了sendmail、exim4、sendemail、nullmailer、dma这些工具,要么配置太繁琐,要么和服务器上25端口正在运行的服务冲突,终于找到了一个简单靠谱的方案!说真的,SSH+PAM的配置其实超级简单,真正卡壳的地方就是找一个轻量化、不占用25端口的邮件发送工具,而MSMTP刚好完美满足需求,不管是对接Gmail还是GMX都很顺畅。
下面是我亲测有效的完整步骤,适配2024年的Ubuntu和类Ubuntu系统:
1. 安装MSMTP及依赖
先把MSMTP装上去,它是个轻量的SMTP客户端,不会占用25端口,完全不会和现有邮件服务起冲突:
sudo apt update && sudo apt install msmtp msmtp-mta ca-certificates
2. 配置MSMTP对接Gmail/GMX
创建MSMTP的核心配置文件,记得替换成你自己的邮箱信息:
sudo nano /etc/msmtprc
根据你用的邮箱选择对应配置:
如果你用Gmail:
(注意Gmail需要开启两步验证并创建应用专用密码,不能直接用账号密码)
auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile /var/log/msmtp.log account gmail host smtp.gmail.com port 587 from your-work-gmail@example.com user your-work-gmail@example.com password your-app-specific-password # 这里填你的Gmail应用专用密码 account default : gmail
如果你用GMX:
auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile /var/log/msmtp.log account gmx host smtp.gmx.com port 587 from your-gmx-account@gmx.com user your-gmx-account@gmx.com password your-gmx-password # 直接填GMX账号密码即可 account default : gmx
保存退出后,给配置文件设置安全权限(避免密码泄露):
sudo chmod 600 /etc/msmtprc sudo chown root:root /etc/msmtprc
3. 配置PAM触发登录通知
编辑PAM的SSHD配置文件,让每次远程登录时自动触发邮件通知:
sudo nano /etc/pam.d/sshd
在文件的末尾添加下面一行:
session optional pam_exec.so /usr/local/bin/ssh-login-notify.sh
4. 编写登录通知脚本
创建一个脚本文件,用来生成登录提醒的内容并通过MSMTP发送:
sudo nano /usr/local/bin/ssh-login-notify.sh
粘贴下面的内容,把your-notification-email@example.com替换成你接收通知的邮箱(比如你的工作Gmail):
#!/bin/bash # 接收通知的邮箱地址 RECEIVER="your-notification-email@example.com" # 邮件主题 SUBJECT="SSH登录提醒: $(hostname)" # 邮件内容,包含登录时间、来源IP、登录用户 MESSAGE="$(date '+%Y-%m-%d %H:%M:%S'): 检测到SSH登录请求,来源IP: ${PAM_RHOST},登录用户: ${PAM_USER}" # 通过MSMTP发送邮件 echo -e "Subject: ${SUBJECT}\n\n${MESSAGE}" | msmtp ${RECEIVER}
给脚本添加执行权限:
sudo chmod +x /usr/local/bin/ssh-login-notify.sh
5. 重启SSHD服务生效
最后重启SSHD服务,让所有配置生效:
sudo systemctl restart sshd
这样就搞定啦!以后每次有人通过SSH远程登录你的服务器,你指定的邮箱就会收到一条清晰的提醒邮件,包含登录时间、来源IP和登录用户,安全感拉满~
备注:内容来源于stack exchange,提问作者Innovations Anonymous

