NRPE가 출력을 읽을 수 없지만 왜 그렇습니까?


27

NRPE 에이 문제가 있습니다. 지금까지 인터넷에서 찾은 모든 것들이 이미 시도한 것을 나에게 지적하는 것 같습니다.

# /usr/local/nagios/plugins/check_nrpe -H nrpeclient

준다

NRPE v2.12

예상대로.

"nrpeclient"의 nrpe.cfg에 정의 된대로 수동으로 명령을 실행하면 예상되는 응답이 제공됩니다.

nrpe.cfg :

command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e   -b ctrl_driver=0 bat_charge

"Expected response"

그러나 Nagios 서버에서 명령을 실행하려고하면 다음과 같은 결과가 나타납니다.

# /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage
NRPE: Unable to read output

누구든지 내가 이것으로 실수했을 수도있는 다른 곳을 생각할 수 있습니까? 다른 여러 서버에서 문제없이 동일한 작업을 수행했습니다. 내가 생각할 수있는 유일한 차이점은이 상자는 RHEL 5 기반이며 다른 상자는 RHEL 4 기반이라는 것입니다.

내가 테스트 한 위의 두 비트는 사람들 이이 문제를 겪었을 때 대부분의 사람들이 제안하는 것입니다.

다시 시작할 때 로그에 이상한 오류가 발생한다고 언급해야합니다 nrpe.

nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading 
nrpe[14534]: Continuing with errors...
nrpe[14535]: Starting up daemon
nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients!
nrpe[14535]: Listening for connections on port 5666 
nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck

그럼에도 불구하고 /usr/local/nagios/etc/nrpe.cfg파일을 자세히 읽고 그에 대해 이야기하는 내용을 얻습니다.



다른 하나는 닫혀 있기 때문에 이것을 유지합시다.
Bart De Vos

또한 STDOUT이 실제로 플러시되는지 확인하십시오.

답변:


35

권리 문제가 있습니다.

명령을 다음과 같이 변경하십시오.

command[check_openmanage]=sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge

(스도 추가)

그런 다음 nagios-user를 sudoers에 추가하십시오.

nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage

또는 파일을 chmod 할 수도 있습니다 ... 작동합니다.

CentOS, Red Hat, Scientific 또는 Fedora를 사용 Defaults requiretty하는 경우 sudoers 파일에서 비활성화 하십시오.


1
@Bart De Vos 그러나 당신이 추가 한 대답은 보안 허점을 만들 것입니다> sudoers 파일에 무언가를 추가하면 잠재적 인 보안 위험이 있습니다. 즉, 버퍼 오버플로를 통해 누군가가 같은 위치에 같은 이름을 가진 파일을 드롭 할 수 있다면 루트 암호를 모르고 상자를 제어하지 않고 파일을 실행할 수 있습니다. 해당 유형의 공격을 방지하기 위해 sudoers 파일에있는 애플리케이션의 MD5) 즉, 주입 된 파일은 동일한 서명을 가지지 않으므로 실행되지 않습니다. [첫번째 코멘트를 읽으십시오] ( crashatau.blogspot.co
Ahmad Hajjar

1
@ X-Ware : 이것은 사실이지만 버퍼 오버 플로우가 남용 될 가능성은 매우 적습니다. 그러나이를 방지하려면 apparmor / SELinux를 사용해야합니다. 이것이 이런 것들이 존재하는 이유입니다.
Bart De Vos

나는 다른 배포판에 다른 사용자가 있다고 생각합니다. 제 경우에는 visudo에 추가하는 사용자는 nagios가 아닙니다. 여전히 Bart De Vos의 솔루션을 따랐지만 / var / log / secure 액세스 로그를 보면 nrpe 명령에 액세스하려는 사용자를 확인할 수 있습니다. Jul 24 15:39:09 호스트 이름 sudo : nrpe : sudoers에없는 사용자; TTY = 알 수 없음; PWD = /; USER = 루트; 명령 = / usr / lib64 / nagios / plugins / check_disk -w 20 % -c 10 % -p / dev / mapper / vg_uxp-lv_root

@AhmadHajjar 심각한가요? 누군가는 nagios (20 세 시스템)를 해킹하고 해당 사용자를 사용하여 루트 권한으로 파일을 실행한다고 생각합니다. 그리고 누군가 파일을 복사하지 못하게하기 위해 실행 파일을 읽기 전용 루트로 실행하지 않았다고 생각하십니까? 걱정된다면 sudo를 사용하는 대신 check_openmanage 실행 파일 자체를 설정하고 누구나 실행할 수 있습니다!
Evan Langlois

11

짧은 대답 : Bash 플러그인을 사용하는 경우 사용할 해석기를 나타내는 shebang 이 있는지 확인하십시오 .#!/bin/bash


내가 직접 작성한 Nagios 플러그인과 같은 문제에 직면했습니다. nagios다음 명령문을 사용하여 사용자로 실행할 때에도 스크립트가 로컬에서 실행될 때 예상대로 실행되었습니다 .

$ sudo sudo -s -u nagios
$ /path/to/my/plugin.sh
STATUS: OK

그러나 Nagios3 서버에서 NRPE를 사용한 원격 시작은 실패했습니다.

$ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin
NRPE: Unable to read output

NRPE를 통해 스크립트를 실행하면을 (를) 실행할 때와 동일한 인터프리터를 사용하지 않은 것처럼 보이므로 스크립트에 shebang 을 추가 하여이 사례를 마침내 해결 했습니다 sudo sudo -s -u nagios.


rbenv와 함께 루비 스크립트 nagios 플러그인을 사용할 때이 문제가 발생했습니다. 수정 프로그램은#!/bin/bash -el eval "$(rbenv init -)" /usr/lib/nagios/plugins/check_something $@
TrinitronX

1
놀라운 답변! sudo -s -u nagios를 통해 nagios가 특정 플러그인에서 출력을 반환 할 수없는 이유를 알 수있었습니다. 정말 고맙습니다!
ufk

6

내 경우에는 문제는 간단했다-사용자 nagios 는 스크립트를 실행할 수 없었습니다. chmod 후 작동하기 시작했습니다. Sudo는 필요하지 않습니다. 그것의 악 :)


1
진정한 대답은 이것입니다. Nagios는 권한이 잘못되었거나 철자가 틀리거나 스크립트가 없기 때문에 스크립트를 실행할 수 없습니다.
droope

5

내가 사용하는 플러그인이 SELinux에서 제대로 작동하지 않아 check_nrpe가 로컬에서 확인 작업을 수행했지만 'NRPE : 출력을 읽을 수 없음'을 얻었습니다. 이를 비활성화하고 파일 컨텍스트를 제거하십시오.

$ ls -l check_om_storage
-r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
$ setfattr -x security.selinux check_om_storage
$ ls -l check_om_chassis 
-r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis

selinux를 비활성화하는 것은 일반적으로 테스트하기에 좋은 아이디어가 아닐 수도 있지만 여전히 유효합니다.
Dennis Nolte

4

경로, 권한, selinux, iptables를 확인하십시오.

내 클라이언트 : nrpe.cfg의 경로 문제였습니다. 명령 경로를 check_ * 플러그인 이름으로 다시 확인하십시오. 경로 이름으로 (lib / local) (libexec / plugins)을 혼동 할 수 있습니다. 실수로 주석 처리 된 주석 처리 된 nrpe cfg 파일의 경로를 넣어 명령을 내 렸습니다. make install 또는 yum 플러그인 설치는 difft 디렉토리에 저장합니다.

commaneted : / usr / local / nagios / libexec / check_disk

실제 경로 : / usr / lib / nagios / plugins / check_disk

서버에서 방화벽 문제가 아니라는 것을 확인할 수 있었고 5666 포트에 telnet 할 수 있고 담요 check_nrpe를 실행할 수 있으며 상태를 반환 값으로 얻을 수 있습니다. 명령을 로컬로 실행할 수 있지만 nrpe의 클라이언트에서 nrpe.cfg의 경로가 잘못되었습니다.


4

필자의 경우 하나의 플러그인 만 실패하고 다른 플러그인은 정상적으로 작동했습니다. LOCALE 문제로 판명되었습니다.

플러그인은 의 출력에서 check_mem.shgrep을 수행했습니다 . 그러나 시스템 전체 LOCALE이 대신 (독일어)을 반환 했으므로 수신 된 모든 값은 빈 문자열이었습니다.MemfreeSpeicherMem


2
러쉬, SF에 온 걸 환영 해! 이것은 제 생각에는 훌륭한 첫 번째 대답입니다. 짧고 요점은 이미 여기에있는 답변 모음에 새로운 것을 추가합니다. +1하고 앞으로 더 많은 답변을 읽을 수 있기를 바랍니다 (작은 서식 편집을 용서하기를 바랍니다).
MadHatter는 Monica

2

이것은 권한 문제이며 스크립트 실행 권한을 부여하면 괜찮습니다.

예를 들면 : Before / Remote host :

[root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh
-rwxr--r-- 1 root root 1598 Jul  7 10:55 /usr/lib/nagios/plugins/check_mem.sh

NRPE 서버 :

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
NRPE: Unable to read output

이후 : 원격 호스트 :

[root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;;

문제가 해결되었습니다.


1
좋은 대답이지만 chmod o + x와 같이 모든 사용자가 check_nrpe를 실행하도록 허용하면 시스템 구성 / 액세스 / 사용 방법에 따라 잠재적 인 보안 위험이 발생할 수 있습니다.
Austinian

1

필자의 경우 모니터링되는 로그 파일은 root : adm이 소유하고 있으므로 nagios 사용자를 adm 그룹에 추가하면 check_log 명령이 성공했지만 모니터링되는 호스트에서 직접 실행될 때만 가능합니다. 모니터링되는 호스트에서 nagios-nrpe-server 서비스를 다시 시작할 때까지 Nagios 서버에서 check_nrpe를 계속 사용하지 못했습니다. 예 :

service nagios-nrpe-server restart

따라서 NRPE에 권한 변경 사항을 적용하려면 서비스를 다시 시작해야했지만이를 파악하는 데 시간이 걸렸습니다.


1

사용자 정의 NRPE 플러그인의 경우 종료 값과 함께 일부 출력을 인쇄하십시오. 스크립트에서 출력이 없으면 NRPE는 "NRPE가 출력을 읽을 수 없습니다" 라고 불평 합니다. nrpe.cfg에서 디버깅을 활성화하고이 오류를 관찰 할 수 있습니다.


1

필자의 경우 문제는 selinux와 관련이 있습니다 (RHEL 6.5를 실행하면 selinux가 적용됩니다).

yum을 통해 nagios-plugins- *를 설치하면 / usr / lib64 / nagios / plugins에 플러그인 파일이 생성됩니다. 해당 플러그인 파일 (ls -lZ)에서 fcontext를 확인하면 파일의 컨텍스트 유형이 "nagios_system_plugin_exec_t"로 설정되어 있으며 이는 check_nrpe가 예상하는 컨텍스트 유형입니다.

필자의 경우 "vi"를 사용하여 "check_mem.sh"사용자 지정 스크립트를 만들었습니다. 결과 파일의 컨텍스트 유형이 "lib_t"로 설정되었습니다. 이로 인해 nrpe는 "NRPE : 출력을 읽을 수 없습니다"를 출력했습니다.

파일 컨텍스트를 "nagios_system_plugin_exec_t"로 변경하면 문제가 해결되었습니다.

chcon -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh

일반적인 selinux 문제 해결은 나 에게이 문제 (/var/log/audit/audit.log 확인)를 지적했을 것입니다. 그러나 그것은 내가 생각한 마지막 일이었습니다.

편집 : chcon은 일시적으로 컨텍스트를 변경합니다. 지속적으로 변경하려면 semanage fcontext -a -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh restorecon -vF /usr/lib64/nagios/plugins/check_mem.sh


0

Nagios 플러그인을 설치하지 않았거나 NRPE가 해당 플러그인을 찾거나 액세스 할 수 없습니다.

Sudoers에 명령을 추가 할 필요가 없었습니다. Nagios 사용자가 명령을 소유하고 읽을 수 있는지 확인하십시오.


0

로컬 디렉토리에 플러그인을 추가해야한다고 생각합니다. /usr/lib64/nagios/plugins/* . 나는 당신과 같은 문제가 있었고이 솔루션으로 해결할 수 있습니다.


0

당신이 쓰는 문제가있었습니다. 내가 실행 한 테스트는 펄에서 이루어졌다. 이 줄을 파일 /etc/nagios/nrpe.cfg에 넣으면 작동합니다.

command [check_memory] = /usr/bin/perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 

0

많은 check_commands 예제와 함께 전체 NRPE 에이전트 설치 및 구성을 다루는 멋진 기사가 있습니다. 새 서버에 NRPE를 설치해야 할 때이 기사를 사용합니다. 그 이상, 페이지의 끝에서 자동으로 설치하고 (사용자가 설정 한 변수에 따라) 당신을 위해 NRPE를 구성하는 멋진 스크립트를 찾을 수 있으며, 문서는 찾을 수 있습니다 여기에


링크가 업데이트되었습니다
Itai Ganot

0

이것은 일반적으로 NRPE 서버가 nagios 대신 사용자 nrpe로 시작될 때 발생합니다.

파일 nrpe_user에서 값을 nagios로 변경하면 /etc/nagios/nrpe.cfg문제가 해결됩니다.

nrpe_group필요한 경우도 변경할 수 있습니다.


0

확인해야 할 또 다른 사항은 명령을 사용하여 명령 sudo -u <another user>을 실행하는 경우libexec sudo하는 사용자가 디렉토리 (및 그 위의 디렉토리)를 읽을 수 있어야한다는 것입니다.

예를 들어 명령이 다음과 같은 경우

command[check_tomcat]=sudo -u tomcat /usr/local/nagios/libexec/check_tomcat ...

Tomcat 사용자는 해당 파일에 액세스 할 수 있어야합니다.

이 문제를 해결하는 한 가지 방법은 다음과 같습니다.

chmod 0775 /usr/local/nagios/
chmod 0755 /usr/local/nagios/libexec

실행 파일이있는 곳으로 마지막 부분 교체


0

나는 같은 문제가 있었고 모니터링 된 컴퓨터에서 nagios 프로세스를 종료하여 문제를 해결할 수 있습니다.

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

그 후 모든 것이 잘되었습니다.


0

FreeBSD에서이 문제가 발생했습니다. 한 시간 동안 벽에 머리를 두드리고 나서 문제가/usr/local/nagios/etc/nrpe.cfg sudo의 잘못된 위치를 가리키는 .

sudo 명령을 가리키는 올바른 위치를 찾으려면 다음을 실행하십시오.

# whereis sudo

그런 다음 nrpe.cfg의 command_prefix를 다음에서 변경했습니다.

command_prefix=/usr/local/sudo

에:

command_prefix=/usr/local/bin/sudo

그런 다음 달렸다 service nrpe restart 문제가 해결되었습니다.

다른 운영 체제에서도 비슷한 문제가 될 수 있습니다. 다른 가능한 권한 문제를 모두 확인했지만 여전히이 문제가 발생했는지 확인해야 할 또 다른 사항입니다.



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.