Передача SSH-флагов плагину Icinga2 by_ssh

Я следую этому руководству, чтобы использовать by_ssh на icinga2 вместо NRPE:

https://wiki.icinga.org/display/howtos/Using+SSH+as+remote+client+for+Icinga2

Проблема у меня заключается в том, что при удаленном выполнении плагина nagios по SSH я получаю "stdin: not tty", что вызывает ошибку icinga2.

Я могу остановить это в командной строке с помощью передачи ssh -t, например:

ssh -t icinga2@myserver.com "ls -l"

Тем не менее, я не могу получить -t в модуль by_ssh. Я думал, что использование атрибута by_ssh_argument сделает это. Мой конфиг icinga2 выглядит так:

object CheckCommand "disks" {
    import "by_ssh"
    vars.by_ssh_logname = "root"
    vars.by_ssh_port = "4873"
    vars.by_ssh_argument = { "-t" = null }
    vars.by_ssh_command = [ "/usr/lib64/nagios/plugins/check_disk", "-w", "$by_ssh_disk_warn$", "-c", "$by_ssh_disk_crit$" ]
   vars.by_ssh_disk_warn = "5%"
   vars.by_ssh_disk_crit = "2%"
}

Я также пытался инвертировать, помещая { 0 = "-t" } или эквивалентный. Ни один из способов не передается правильно в команду ssh.

Я либо не собираюсь делать это правильным способом, либо это невозможно, и мне нужно сделать свой собственный плагин by_ssh?

1 ответ

Я нашел решение, является ли это лучшим способом или делает это или нет, я не уверен.

Я обнаружил, что мимоходом -E нагиосу check_by_ssh плагин останавливает ошибку tty. Я не мог увидеть способ пройти -E в от by_ssh плагин, поэтому я создал свой собственный плагин icinga2 для этого:

object CheckCommand "by_ssh_extended" {
    import "plugin-check-command"
    import "ipv4-or-ipv6"

    command = [ PluginDir + "/check_by_ssh" ]

    arguments = {
            "-H" = "$by_ssh_address$"
            "-p" = "$by_ssh_port$"
            "-C" = {{
                    var command = macro("$by_ssh_command$")
                    var arguments = macro("$by_ssh_arguments$")

                    if (typeof(command) == String && !arguments) {
                            return command
                    }

                    var escaped_args = []
                    for (arg in resolve_arguments(command, arguments)) {
                            escaped_args.add(escape_shell_arg(arg))
                    }
                    return escaped_args.join(" ")
            }}
            "-l" = "$by_ssh_logname$"
            "-i" = "$by_ssh_identity$"
            "-q" = {
                    set_if = "$by_ssh_quiet$"
            }
            "-E" = {
                    set_if = "$by_ssh_e$"
            }
            "-w" = "$by_ssh_warn$"
            "-c" = "$by_ssh_crit$"
            "-t" = "$by_ssh_timeout$"
            "-o" = {
                    value = "$by_ssh_options$"
                    description = "Provide ssh options (may be repeated)"
            }
    }

    vars.by_ssh_address = "$check_address$"
    vars.by_ssh_quiet = false
}
Другие вопросы по тегам