SSH登录成功后通过pam_exec发送邮件失败问题排查求助
SSH登录成功后通过pam_exec发送邮件失败问题排查求助
你好!看起来你的配置思路是没问题的,不过可能还有几个容易忽略的细节需要检查,我帮你逐项梳理:
1. 必须重启sshd服务让配置生效
修改/etc/pam.d/sshd后,不需要单独重启PAM服务,但一定要重启sshd服务,让它加载新的PAM规则:
sudo systemctl restart sshd
2. 检查脚本的权限与可执行性
你的sendmail.sh脚本需要确保有可执行权限,并且PAM进程能正常调用它:
- 先给脚本添加执行权限:
sudo chmod +x /usr/local/bin/sendmail.sh - 建议将脚本所有者设为root,避免权限不足的问题:
sudo chown root:root /usr/local/bin/sendmail.sh
3. 脚本内容的细节优化
- 你定义的
host变量带了多余的单引号:host="'ubuntu-server'",这会导致邮件主题里显示成'ubuntu-server'(带单引号),可以改成:host="ubuntu-server" - 调试阶段可以暂时去掉curl的
-s参数,或者把输出重定向到日志文件,方便排查API调用问题:curl --user 'api:key-xxxxxxxxxxxxxxxxxxxxxxxx' https://api.eu.mailgun.net/v3/mydomain.com/messages -F from='Server Notification <postmaster@mydomain.com>' -F to='mymail@gmail.com' -F subject="$subject" -F text='Detected succesfull SSH login' >> /var/log/ssh_login_mail.log 2>&1
4. 手动测试脚本有效性
先脱离PAM环境手动执行脚本,验证是否能正常发送邮件:
# 因为pam_exec用了seteuid,建议以root身份测试 sudo -u root /usr/local/bin/sendmail.sh
如果手动执行都失败,说明脚本本身(比如Mailgun密钥、域名、收件人地址)有问题,先解决这个再测试SSH触发的场景。
5. 查看错误日志的位置
- PAM与sshd相关日志:默认在
/var/log/auth.log,可以实时查看:
这里会记录pam_exec的执行状态,如果脚本调用失败,会有明确的错误提示。tail -f /var/log/auth.log - 脚本自定义日志:如果按上面的方法给curl添加了日志重定向,可以查看
/var/log/ssh_login_mail.log,里面会有Mailgun API调用的详细响应。
备注:内容来源于stack exchange,提问作者gabogabans
相关产品推荐
相关产品推荐

