我正在使用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无法运行任何程序。
答案 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)到已知主机列表。
这很正常,再次运行检查,它应该可以正常工作