我正在配置 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 上看到了这个输出:
UNKNOWN - check_by_ssh:远程命令'/tmp/test.sh'返回状态255
现在我已经添加了touch success
到test.sh
脚本,以便查看它是否完全执行 - 但似乎没有。这意味着当Icinga执行我的脚本时,它甚至在执行之前就会失败。
有什么线索可以吗?在check_by_ssh
和Icinga2之间没有很多在线示例。
注意: Icinga使用root用户识别远程服务器。我知道这不是最佳实践,但这是发展环境。
更新:我想我发现了这个问题。问题是我正在尝试使用root用户登录远程计算机。即使使用公钥认证,也不支持此功能。该脚本必须与用户
一起执行icinga
第二次更新:我搞定了。问题是密钥验证,icinga使用用户icinga执行命令(即使使用by_ssh_logname属性)和添加
vars.by_ssh_options = "StrictHostKeyChecking no"
答案 0 :(得分:1)
我发现了这些问题,在我的案例中很少有这些问题。
icinga
用户通过SSH登录,即使我使用-l root
。因此,要安装ssh密钥,我必须在ssh-copy-id icinga@HOST
用户下执行root
(Icinga shell设置为/ sbin / nologin)icinga
用户登录远程计算机sudo -u icinga ssh icinga@HOST -i id_rsa
StrictHostKeyChecking no
添加到模块选项中。Voila,现在有效。
答案 1 :(得分:0)
我的问题是所使用的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