从远程管理主机调用时 NRPE 命令不起作用

从远程管理主机调用时 NRPE 命令不起作用

首先:我知道已经有人问过这个问题,但即使使用他们的答案,我仍然无法弄清楚为什么我的命令不起作用。
我想要做的是使用 NRPE 调用远程主机上的脚本。但是,脚本要执行的操作可能只能由特定用户(我们称他为userA)执行。

  • 现在,我的 NRPE 命令如下所示:

    command[debug_now]=/usr/local/bin/debug_now

  • 我的 sudoers 有条目, nagios ALL=(tomcat) NOPASSWD: /usr/local/bin/debug_now因为我注意到用户从 nrpe.cfg 调用脚本被称为nagios

  • 脚本/usr/local/bin/debug_now如下:

    #!/bin/sh
    whoami
    echo "Debug..."
    sudo -u tomcat whoami
    echo "Debug finished"
    

上述脚本具有与其他脚本相同的权限,可以由用户执行nagios。此外,当它在本地执行时,它会漂亮地打印:

nagios
Debug... 
tomcat
Debug finished

并且它通常按预期工作。但是,当从管理主机调用它时,它只打印

nagios
Debug...
Debug finished

这可能是由 引起的NRPE: Cannot read output,每次我尝试sudo从管理主机执行任何操作时都会出现此错误。我已经尝试添加到 sudoers 条目,Defaults !requiretty但没有成功。我使用 Debian 6.0.7。当从管理主机调用时,我该怎么做才能使我的脚本正常工作?

编辑。
首先,目录/etc/sudoers.d/只包含文件 README。
userA真实名称应该是tomcat 让我们看一下visudo输出:

 Defaults        env_reset
 Defaults !requiretty
 root    ALL=(ALL) ALL
 nagios ALL=(tomcat)     NOPASSWD: /usr/bin/whoami

 %www ALL=(ALL) NOPASSWD: /bin/su - www
 %tomcat ALL=(ALL) NOPASSWD: /bin/su - tomcat
 %tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat stop
 %tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat start
 %tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat restart

请注意我甚至尝试了nagios ALL=(tomcat) NOPASSWD: ALLnagios ALL=(ALL) NOPASSWD: ALL。我还删除了一些用户条目,例如username ALL=(ALL) NOPASSWD: ALL


国家可再生能源计划

 $ tail -n 1 /etc/nagios/nrpe.cfg
 command[debug_now]=/usr/local/bin/debug_now


 $ ls -l /usr/local/bin/debug_now
 -rwxr-xr-x 1 root staff 573 Dec  2 09:06 /usr/local/bin/debug_now
 $ ls -lh /usr/local | grep bin
 drwxrwsr-x  2 root      staff 4.0K Dec  2 09:12 bin
 $ ls -lh /usr | grep local
 drwxrwsr-x  14 root staff 4.0K Oct 22  2010 local


来自另一台主机

$ /usr/lib/nagios/plugins/check_nrpe -H <ip address> -c debug_now
nagios
Debug...
Debug finished

答案1

天啊,我现在感到很羞愧。

一切都很好。你需要重新开始 nagios-nrpe-server更改后,重新加载是不够的。如果您仅更改或其他配置文件,sudoers则重新加载即可。 @MadHatter,@Keith - 谢谢你们的帮助!nrpe.cfg

答案2

您的sudoers条目指定了运行 的权限/usr/local/bin/debug_now,但您的脚本却显示sudo -u userA whoami。这不会起作用;无论您想以sudo权限运行什么命令,它都必须出现在sudoers文件中。

答案3

我尝试在 Debian Squeeze (6.0.10) 机器上复制您的问题,但没有遇到任何问题。如果您完全按照以下方式进行设置(使用正确的 sudo 设置就像 MadHatter 指出的那样,如果包括权限和模式正确的话,它就会按照您预期的方式运行。

# ls -l /etc/sudoers.d/nagios-test 
-r--r----- 1 root root 44 Dec  1 11:36 /etc/sudoers.d/nagios-test
# cat /etc/sudoers.d/nagios-test 
nagios ALL=(keith)  NOPASSWD:/usr/bin/whoami

# tail -n 1 /etc/nagios/nrpe.cfg
command[debug]=/usr/local/bin/debug
# ls -l /usr/local/bin/debug
-rwxr-xr-x 1 root staff 75 Dec  1 11:37 /usr/local/bin/debug

# cat /usr/local/bin/debug
#!/bin/sh
whoami
echo "Debug..."
sudo -u keith whoami
echo "Debug finished"

从另一台主机:

$ ./check_nrpe -H squeeze -c debug
nagios
Debug...
keith
Debug finished

相关内容