nrpe 用户无法使用 lsof 远程正确执行脚本,netstat 可以工作

nrpe 用户无法使用 lsof 远程正确执行脚本,netstat 可以工作

我为 nagios 创建了一个简单的脚本来检查远程服务器上的端口。最初,我尝试使用lsof

#!/bin/bash

RESULT=$(lsof -i :8080 | grep LISTEN)

if [ -n "$RESULT" ]
  then
  echo "$RESULT"
exit 0
  else
   echo "Check application port is down"
exit 2
fi

在本地机器上,nagios 用户可以运行并执行脚本并获得预期的输出。但在远程使用 时check_nrpe,我总是得到 else echo 返回

Check application port is down

尽管正如我所说在本地运行脚本,但它运行正常

nrpe 用户拥有执行脚本所需的所有权限,SELinux 处于宽容模式,但我始终无法让它工作。因此我将 RESULT 行更改为使用netstat

RESULT=$(netstat -anp | grep ":8080" | grep LISTEN)

然后我可以使用远程方式获得预期的响应。因此,我假设这是和check_nrpe的某种问题。但我在日志中找不到任何东西。check_nrpelsof

有人有什么想法或建议让它正常工作吗lsof

答案1

非 root 用户看不到任何输出lsof -i。(已在 Debian 8 和 Cent 7 上确认,没有 SELinux。)

如果您想在 nagios 检查中使用它,您必须通过 sudo 运行 lsof。

如果 sudo 配置为需要 tty(可能是 CentOS 上的默认设置),您可以执行以下操作:

Defaults:nagios !requiretty
nagios ALL=NOPASSWD:/usr/bin/lsof

如果有必要,请替换nagios为,并修改 lsof 的路径。nrpe

相关内容