我正在使用 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 无法运行任何程序。
出于某种原因,添加“-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
最终输出:
世界你好
如果由于要求您验证密钥真实性而导致
check_by_ssh
失败,您可以在 check_by_ssh
选项中禁用严格的主机密钥检查,就像使用 ssh 客户端一样。这是一个小小的安全牺牲,但如果您位于受信任的专用网络上,则这种权衡可以忽略不计,并且您无需验证是否希望继续连接,即使是在第一次尝试时也是如此:
/usr/lib/nagios/plugins/check_by_ssh -l nagios -o StrictHostKeyChecking=no
就我而言,错误是由于 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
...
刚刚在我的一些系统上遇到了这个问题。我不明白,但 -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
您必须第一次手动运行该命令,因为它会提出一个您必须回答“是”的问题。之后就不再需要交互了。
您必须为连接到的每个服务器执行此操作。
我已经找到答案了。
为了跳过横幅,请在 nagios 服务器上的 .ssh 目录中添加文件“config”
猫配置 日志级别=安静
chmod 600 配置
之后,横幅将被跳过,nagios 检查将在没有 -E 标志的情况下工作
问候 博格丹
如果您已经设置了公钥,那么您必须在
SSH
命令中传递密钥,例如:
command_line $USER1$/check_by_ssh -i /usr/local/nagios/etc/keys/$HOSTNAME$ -H $HOSTADDRESS$ -t 60 -l "$USER24$" -C "cd tmp"
确保公钥有权限
0600
。
就我而言,这是在我们的一台服务器重建后发生的。 问题是 icinga master 上的known_hosts 文件仍然具有重建之前目标主机的 SSH 密钥。 解决方案是简单地编辑known_hosts文件并删除与目标主机相关的行。 对我来说,它位于:/var/spool/icinga2/.ssh/known_hosts
一旦执行此操作并运行检查,您第一次可能会看到类似以下的消息:
远程命令执行失败:警告:永久添加 将“172.16.0.90”(ED25519)添加到已知主机列表中。
这是正常的,再次运行检查,应该可以工作了