Linux

從遠端管理主機呼叫 NRPE 命令時不起作用

  • November 13, 2017

首先:我知道已經有關於這個問題的問題,但即使使用他們的答案,我仍然無法弄清楚為什麼我的命令不起作用。

我想要做的是使用 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.

NRPE

$ 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

天啊,我現在好慚愧。

一切安好。更改後需要重新啟動 ,重新載入是不夠的。如果您只更改或其他配置文件,重新載入就可以了。@MadHatter,@Keith - 謝謝你們的幫助!nagios-nrpe-server``sudoers``nrpe.cfg

您的sudoers條目指定了執行權限/usr/local/bin/debug_now,但您的腳本說sudo -u userA whoami。這行不通;無論您想以sudo特權執行什麼命令,都必須出現在sudoers文件中。

引用自:https://serverfault.com/questions/648169