從遠端管理主機呼叫 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: ALL
和nagios 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
文件中。