通过 NRPE 的 NRPE 套接字超时,作为 nrpe 用户工作

NRPE Socket timeout via NRPE, works as nrpe user

Azure 服务器上的 nrpe - nrpe-srvr,用户 nrpe,执行脚本 /usr/local/naemon/libexec/check_curl_http.php 我将其命名为 script

./script -U www.google.com 后的期望输出:

Page OK: HTTP Status Code 200 - 11099 bytest in 0.** seconds | time=0.059 size=11099

我通过 运行 来自 rootnrpe

的脚本实现了上述输出

运行 sudo -u nrpe ./script -U www.google.com returns:

Error in opening page! Err:Failed to connect to [ipv6 addr] Network is unreachable

但是 运行 su - nrpe -c './script -U www.google.com' 可以得到想要的结果。

Naemon 报告:

CHECK_NRPE: Socket timeout after 30 secs

对同一主机的其他 NRPE 检查正在运行,因此我认为这与用户执行此特定脚本有关。我确实收到了 SELinux 的拒绝,但调整了上下文。删除上下文并将 SELinux 设置为 permissive 会产生相同的错误。启用 NRPE 日志文件,带有调试功能,但除了 Running command 之外,它并没有真正揭示太多。有一个:

WARNING: my_system() seteuid(0): Operation not permitted

在日志中,但查看 "Normal" 行为的支持文档。

我会 post 以防其他人遇到此问题,我会标记 Azure / AWS。

本质上,云提供商(大部分)有一个存储在环境变量 http_proxy && https_proxy 中的内部代理。默认情况下,NRPE 不使用加载环境变量。现在我不知道是否有它的选项(文档中提到使用 uid 而不是用户名(使用用户名)时存在错误)但是它很简单,可以调用代理进行这样的检查。