使用GnuPG加密Nagios报告邮件会因空邮件而失败,为什么?

时间:2015-09-19 12:42:46

标签: smtp nagios gnupg pgp

我正在尝试使用gpg2 Nagios3发送的邮件进行密码翻译。为此,我在/etc/nagios3/commands.cfg上创建了这个自定义命令:

/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/gpg2 --armor --encrypt --recipient toto@titi.com | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
    }

有些观点:

  1. 电子邮件已发送,但它是"为空":

      

    Sep 19 14:35:25 tutu nagios3:完成守护......(新PID = 4313)
      9月19日14:36:15 tutu nagios3:服务警告:
      tete_vm; HTTP; OK; HARD; 4; HTTP OK:HTTP / 1.1 200 OK - 0.441中的347字节
      第二响应时间9月19日14:36:15 tutu nagios3:SERVICE
      通知:tata; tete_vm; HTTP;确定;通过电子邮件通知服务; HTTP OK:
      HTTP / 1.1 200 OK - 在0.441秒响应时间内347字节

  2. 命令:

    /usr/bin/gpg2 --armor --encrypt --recipient toto@titi.com | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$</code>
    

    在命令行上运行良好

  3. 我测试了这个命令:

    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/gpg2 --armor --encrypt --recipient toto@titi.com >> /tmp/toto.txt
    
  4. 创建了文件/tmp/toto.txt但是&#34;为空&#34;。

    所以,在这个文件上使用/usr/bin/gpg2似乎是一个问题,但我找不到原因!

1 个答案:

答案 0 :(得分:1)

使用GnuPG从服务内部加密时最常见的错误是收件人的密钥是由另一个(系统)用户导入的,而不是运行服务的用户,例如root导入的,但该服务以nagios运行。

GnuPG维护每用户&#34; GnuPG主目录&#34; (通常为~/.gnupg),其中包含每用户密钥环。如果您以root用户身份导入,则其他服务帐户对此处的密钥一无所知。

调试问题的第一步是将gpg的stderr重定向到文件,这样您就可以通过向GnuPG调用添加2>>/tmp/gpg-error.log来阅读错误消息:

/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/gpg2 --armor --encrypt --recipient toto@titi.com 2>>/tmp/gpg-error.log | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$

如果问题类似于&#34;找不到密钥&#34;或类似的,您有两种可能解决问题:

  1. 导入服务的用户帐户。切换到服务的用户,然后再次导入密钥。
  2. 使用--homedir [directory]选项将GnuPG主目录硬编码到其他位置,例如在您还存储Nagios插件的位置。

    请注意使用适当的限制性权限。如果允许其他用户阅读文件,GnuPG会非常挑剔!