4

我正在使用 Groundwork / Nagios,并且正在尝试设置 check_by_ssh。现在,命令是:

$USER1$/check_by_ssh -i ~nagios/.ssh/id_dsa -H $HOSTADDRESS$ -t 60 -l "$USER24$" -C "/tmp/test"

其中 /tmp/test 是一个 Hello World 程序。

但它正在返回消息 "Remote command execution failed:********************************************"

我为 nagios 设置了 ssh 密钥以登录$HOSTADDRESS$as $USER24$,但我仍然收到错误消息。(私钥在基础框的~nagios/.ssh 中,公钥在远程主机上的~/$USER24$/.ssh 中)

所以基本上, check_by_ssh 无法运行任何程序。

4

9 回答 9

13

出于某种原因,添加“-E”标志修复了它。根据check_by_ssh 手册页,这是忽略 STDERR 标志。现在我从 /tmp/test 得到输出。

最终命令:

$USER1$/check_by_ssh -i ~nagios/.ssh/id_dsa -H $HOSTADDRESS$

-t 60 -l "$USER24$" -C "/tmp/test" -E

最终输出:

你好世界

于 2011-06-22T18:00:58.950 回答
8

如果check_by_ssh由于需要验证密钥真实性而失败,则可以在check_by_ssh选项中禁用严格的主机密钥检查,就像使用 ssh 客户端一样。这是一个很小的安全牺牲,但如果您使用的是受信任的专用网络,则可以忽略不计,并且您无需验证您是否希望继续连接,即使是第一次尝试:

/usr/lib/nagios/plugins/check_by_ssh -l nagios -o StrictHostKeyChecking=no
于 2012-11-28T18:02:42.960 回答
4

在我的情况下,错误是由于更新了 nagios 访问的 ssh 服务的公钥。

在安装 nagios 的监控机器上,更新或删除文件“/var/spool/nagios/.ssh/known_hosts”以删除所有公钥。

并再次尝试 check_by_ssh。

例子 :

# ./check_by_ssh -H target_machine -C "/bin/ls" 
Remote command execution failed: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

# rm /var/spool/nagios/.ssh/known_hosts

#  ./check_by_ssh -H target_machine -C "/bin/ls /" 
bin
boot
cgroup
core
data
dev
etc
home
...
于 2013-06-27T08:48:47.820 回答
4

刚刚在我的一些系统上遇到了这个问题。我无法弄清楚,但 -E 标志确实有帮助。这发生在我的主机上的原因是我启用了一个 SSH 横幅来显示标准“法律禁止未经授权的使用”。该横幅通过 stderr 显示,因此每个 check_by_ssh 调用都失败并显示“远程命令执行失败”。

因此,如果主机密钥不是您的问题并且您对 -E 不满意,请放下您的横幅。如果您对 Nagios 检查使用一致的用户名,则可以使用 sshd_config 中的 Match 选项将 nagios 用户排除在显示横幅之外:

https://unix.stackexchange.com/questions/96975/disable-ssh-banner-for-specific-users-or-ips

于 2015-03-03T14:15:50.820 回答
3

您必须第一次手动运行该命令,因为它会询问您必须回答“是”的问题。之后,它不再需要交互。

您必须为连接到的每台服务器执行此操作。

于 2012-08-07T16:58:28.693 回答
1

我找到了答案。

为了跳过横幅,在 nagios 服务器上的 .ssh 目录中添加文件“config”

猫配置日志级别=安静

chmod 600 配置

之后,横幅将被跳过,nagios 检查将在没有 -E 标志的情况下工作

问候博格丹

于 2015-06-01T07:56:13.420 回答
0

如果您已经设置了公钥,那么您必须在SSH命令中传递密钥,例如:

command_line    $USER1$/check_by_ssh -i /usr/local/nagios/etc/keys/$HOSTNAME$ -H $HOSTADDRESS$ -t 60 -l "$USER24$" -C "cd tmp"

确保公钥具有权限0600

于 2011-06-22T12:51:19.410 回答
0

我在 Icinga 2 上遇到了与 check_by_ssh 相同的问题。

我通过在命令对象( Icinga 2 doc link)中设置 vars.by_ssh_quiet = "true" 来修复它。

object CheckCommand "by_ssh_redis" {
  import "by_ssh"
  vars.by_ssh_command = [ "/usr/lib64/nagios/plugins/check_redis.pl", "-H", "localhost"]
  vars.by_ssh_quiet  = "true"
}
于 2016-05-14T07:38:41.323 回答
0

就我而言,这发生在我们的一台服务器重建之后。问题是 icinga 主机上的 known_hosts 文件仍然具有重建之前目标主机的 SSH 密钥。解决方案是简单地编辑 known_hosts 文件并删除与目标主机相关的行。对我来说,它位于:/var/spool/icinga2/.ssh/known_hosts

执行此操作并运行检查后,您第一次可能会看到如下消息:

远程命令执行失败:警告:将“172.16.0.90”(ED25519)永久添加到已知主机列表中。

这很正常,再次运行检查,它应该可以工作

于 2020-02-19T11:02:44.117 回答