【问题标题】:Icinga2 check_by_ssh plugin returns 255 without running the commandIcinga2 check_by_ssh 插件在不运行命令的情况下返回 255
【发布时间】:2017-08-14 14:23:46
【问题描述】:

我正在配置 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 盒子和我正在运行命令的远程机器之间建立了信任关系。

当我通过 shell 执行命令时,它可以工作

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

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

未知 - check_by_ssh:远程命令“/tmp/test.sh”返回状态 255

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

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

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

更新:我想我找到了问题所在。问题是我正在尝试使用 root 用户登录远程机器。这不受支持,即使使用公钥身份验证也是如此。该脚本必须与用户icinga一起执行

第二次更新:我得到了它的工作原理。问题是密钥身份验证,icinga 使用用户 icinga 执行命令的事实(即使使用 by_ssh_logname 属性)以及添加 vars.by_ssh_options = "StrictHostKeyChecking no"

【问题讨论】:

标签: bash monitoring icinga2


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我发现了问题,在我的案例中很少。

    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 添加到模块选项中。

    瞧,现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 2021-12-05
      • 2014-12-17
      相关资源
      最近更新 更多