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

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,可以实时查看:
    tail -f /var/log/auth.log
    
    这里会记录pam_exec的执行状态,如果脚本调用失败,会有明确的错误提示。
  • 脚本自定义日志:如果按上面的方法给curl添加了日志重定向,可以查看/var/log/ssh_login_mail.log,里面会有Mailgun API调用的详细响应。

备注:内容来源于stack exchange,提问作者gabogabans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:29:09