基础工作/Nagios 的 check_by_ssh 返回“远程命令执行失败”

问题描述 投票:0回答:8

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

$USER1$/check_by_ssh -i 〜nagios/.ssh/id_dsa -H $主机地址$ -t 60 -l“$USER24$”-C“/tmp/test”

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

但它正在返回消息

"Remote command execution failed:********************************************"

我为 nagios 设置了 ssh 密钥以作为

$HOSTADDRESS$
登录
$USER24$
,但我仍然收到错误。 (私钥位于groundwork盒子上的~nagios/.ssh中,公钥位于远程主机上的~/$USER24$/.ssh中)

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

ssh ssh-keys nagios
8个回答
14
投票

出于某种原因,添加“-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

最终输出:

世界你好


9
投票

如果由于要求您验证密钥真实性而导致

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

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

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
...

4
投票

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

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

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


3
投票

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

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


1
投票

我已经找到答案了。

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

猫配置 日志级别=安静

chmod 600 配置

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

问候 博格丹


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


0
投票

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

一旦执行此操作并运行检查,您第一次可能会看到类似以下的消息:

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

这是正常的,再次运行检查,应该可以工作了

© www.soinside.com 2019 - 2024. All rights reserved.