Плагин Icinga2 check_by_ssh возвращает 255 без запуска команды

Я настраиваю сервер 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"


person Chen A.    schedule 14.08.2017    source источник
comment
Разрешается ответить на ваш вопрос, если вы нашли решение: stackoverflow.com/help/self-answer   -  person Pavel    schedule 15.08.2017


Ответы (2)


Я нашел проблемы, в моем случае их было немного.

  1. Icinga использовала пользователя icinga для входа через SSH, даже когда я использовал -l root. Итак, чтобы установить ключи ssh, мне пришлось выполнить ssh-copy-id icinga@HOST под пользователем root (оболочка Icinga настроена на /sbin/nologin)
  2. Затем я скопировал закрытый ключ (опять же, пользователя root) в папку icinga, чтобы он был доступен для приложения, и изменил владельца файла.
  3. Затем я попытался войти под icinga пользователем на удаленную машину sudo -u icinga ssh icinga@HOST -i id_rsa.
  4. Если шаг 3 не удался, вам нужно понять это, прежде чем продолжить. Следующее, что я сделал, это добавил StrictHostKeyChecking no к параметрам модуля.

Вуаля, теперь это работает.

person Chen A.    schedule 15.08.2017

Моя проблема заключалась в том, что используемые файлы ключей rsa не принадлежали пользователю «nagios»:

-rw------- 1 nagios nagios 3.2K Nov 30 14:43 id_rsa
-rw-r--r-- 1 nagios nagios  766 Nov 30 14:42 id_rsa.pub
person Manuel Schmitzberger    schedule 30.11.2017