nrpe на лазурном сервере — nrpe-srvr
, пользователь nrpe
, выполнение скрипта /usr/local/naemon/libexec/check_curl_http.php
Я назову его script
Желаемый результат после ./script -U www.google.com
:
Page OK: HTTP Status Code 200 - 11099 bytest in 0.** seconds | time=0.059 size=11099
Я достигаю вышеуказанного вывода, запустив скрипт из root
или nrpe
Запуск sudo -u nrpe ./script -U www.google.com
возвращает:
Error in opening page! Err:Failed to connect to [ipv6 addr] Network is unreachable
Однако бег su - nrpe -c './script -U www.google.com'
работает с желаемым результатом.
Наймон сообщает:
CHECK_NRPE: Socket timeout after 30 secs
Другие проверки NRPE на том же хосте работают, поэтому я думаю, что это как-то связано с выполнением пользователем этого конкретного скрипта. У меня был отказ от SELinux
, но я поправил контекст. Удаление контекста и установка разрешающего режима для SELinux привели к той же ошибке. Включены файлы журнала NRPE с отладкой, но, кроме Running command
, это мало что раскрывает. Eсть:
WARNING: my_system() seteuid(0): Operation not permitted
в журналах, но глядя на документацию поддержки, это «нормальное» поведение.
Я думаю, что скрипт работает нормально. На самом деле мне удалось заставить его работать как другой пользователь, используя su - nrpe - c './script -u www.google.com'
в порядке. Так что я думаю, что сценарий это нормально. Выполнение NRPE вызывает проблему.
Я опубликую это на всякий случай, если у кого-то еще возникнет эта проблема, и я отмечу Azure/AWS.
По сути, облачные провайдеры (в основном) имеют внутренний прокси-сервер, который хранится в переменной среды http_proxy
&& https_proxy
. NRPE по умолчанию не использует переменные среды загрузки. Теперь я не знаю, есть ли для этого вариант (в документах упоминается, что есть ошибка при использовании uid вместо имени пользователя (использовалось имя пользователя)), однако достаточно просто вызвать прокси для таких проверок.
Попробуйте также запустить этот скрипт в подробном режиме.