Groundwork / Nagios'check_by_ssh返回“远程命令执行失败”

时间:2011-06-21 21:02:25

标签: ssh ssh-keys nagios

我正在使用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$身份登录$USER24$,但我仍然收到错误消息。 (私钥在基础工具箱中的~nagios / .ssh中,公钥在远程主机上的〜/ $ USER24 $ /。ssh中)

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

9 个答案:

答案 0 :(得分:13)

由于某种原因,添加“-E”标志修复它。根据{{​​3}},这是忽略STDERR标志。现在我从/ tmp / test获得输出。

最终命令:

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

-t 60 -l“$ USER24 $”-C“/ tmp / test”-E

最终输出:

  

Hello World

答案 1 :(得分:7)

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

/usr/lib/nagios/plugins/check_by_ssh -l nagios -o StrictHostKeyChecking=no

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

在我的情况下,错误是由于更新了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
...

答案 5 :(得分:1)

我找到了答案。

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

cat config 的LogLevel = QUIET

chmod 600 config

之后,将跳过横幅,并且nagios check将在没有-E标志的情况下工作

此致 波格丹

答案 6 :(得分: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

答案 7 :(得分: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"
}

答案 8 :(得分:0)

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

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

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

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