Icinga2 check_by_ssh 插件 returns 255 没有 运行 命令

Icinga2 check_by_ssh plugin returns 255 without running the command

我正在配置 Icinga2 服务器并希望它使用 check_by_ssh[= 运行 外部机器上的本地脚本44=]插件,我遇到了一个奇怪的问题。我已经搜索了几个小时的答案,但没有找到答案。

我的命令对象如下所示:

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 盒子和我正在 运行 命令的远程机器之间有信任。

当我通过 shell 执行命令时,它起作用了

[root@icinga ~]# ssh root@10.10.10.1 -C "/tmp/test.sh"
[root@icinga ~]# echo $?
0

但是当它被服务器执行时,我在 Icingaweb2 上看到这个输出:

UNKNOWN - check_by_ssh: Remote command '/tmp/test.sh' returned status 255

现在我添加了一个 touch successtest.sh 脚本,以查看它是否完全执行 - 但似乎没有。这意味着当 Icinga 执行我的脚本时,它甚至在执行之前就失败了。

有什么线索吗? check_by_ssh 和 Icinga2 的在线示例不多。

注意: Icinga 使用 root 用户来识别远程服务器。我知道这不是最佳实践,但这是开发环境。

UPDATE: I think I have found the issue. The problem is that I'm trying to use root user to login the remote machine. This IS NOT supported, even with public key authentication. The script has to be executed with the user icinga

2nd Update: I got it works. The issue was keys authentication, the fact that icinga uses the user icinga to execute the command (even when using by_ssh_logname attribute) and the addition of vars.by_ssh_options = "StrictHostKeyChecking no"

我发现了问题,在我的案例中几乎没有。

  1. Icinga 使用 icinga 用户通过 SSH 登录,即使我使用 -l root。因此,要安装 ssh 密钥,我必须在 root 用户下执行 ssh-copy-id icinga@HOST(Icinga shell 设置为 /sbin/nologin)
  2. 然后我将私钥(同样是 root 用户的)复制到 icinga 文件夹以便应用程序可以访问它,并更改了文件的所有权
  3. 接下来,我尝试使用 icinga 用户登录到远程计算机 sudo -u icinga ssh icinga@HOST -i id_rsa
  4. 如果第 3 步失败,您需要先想清楚再继续。接下来我做的是将 StrictHostKeyChecking no 添加到模块选项中。

瞧,现在可以了。

我的问题是使用的 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