You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 11:03:14