Я настраиваю сервер Icinga2 и хочу, чтобы он запускал локальные сценарии на внешних компьютерах с помощью подключаемого модуля check_by_ssh, и столкнулся со странной проблемой. Я искал ответ в течение нескольких часов, но безуспешно.
Мой объект команды выглядит следующим образом:
object CheckCommand "check_procs" {
import "by_ssh"
vars.by_ssh_logname = "root"
vars.by_ssh_port = "22"
vars.by_ssh_command = "/tmp/test.sh"
vars.by_ssh_identity = "/etc/icinga2/conf.d/services/id_rsa.pub"
vars.by_ssh_ipv4 = "true"
vars.by_ssh_quiet = "true"
}
Содержимое test.sh
просто exit 0
. У меня есть доверие между моей коробкой Icinga и удаленной машиной, на которой я запускаю команду.
Когда я выполняю команду через оболочку, она работает
[root@icinga ~]# ssh [email protected] -C "/tmp/test.sh"
[root@icinga ~]# echo $?
0
Но когда он выполняется сервером, я вижу на своем Icingaweb2 этот вывод:
НЕИЗВЕСТНО - check_by_ssh: удаленная команда '/tmp/test.sh' вернула статус 255
Теперь я добавил скрипт touch success
в test.sh
, чтобы посмотреть, выполняется ли он вообще, но, похоже, это не так. Это означает, что когда Icinga выполняет мой скрипт, происходит сбой еще до его выполнения.
Есть подсказки, что это может быть? В сети не так много примеров check_by_ssh
с Icinga2.
ПРИМЕЧАНИЕ. Icinga использует пользователя root для идентификации с удаленным сервером. Я знаю, что это не лучшая практика, но это среда разработки.
ОБНОВЛЕНИЕ: я думаю, что нашел проблему. Проблема в том, что я пытаюсь использовать пользователя root для входа на удаленную машину. Это НЕ поддерживается, даже при аутентификации с открытым ключом. Скрипт должен выполняться с пользователем
icinga
2-е обновление: у меня все работает. Проблема заключалась в аутентификации ключей, том факте, что icinga использует пользователя icinga для выполнения команды (даже при использовании атрибута by_ssh_logname) и добавлении
vars.by_ssh_options = "StrictHostKeyChecking no"