2011-06-21 80 views
3

我正在使用Groundwork/Nagios,并且正在尝试设置check_by_ssh。眼下,该命令是:Groundwork/Nagios的check_by_ssh正在返回“远程命令执行失败”

$ USER1 $/check_by_ssh -i 〜Nagios的/的.ssh/id_dsa的-H $ HOSTADDRESS $ -t 60 -l “$ USER24 $” -C“的/ tmp /测试“

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

,但它返回的消息 "Remote command execution failed:********************************************"

我已经设置了Nagios的登录到$HOSTADDRESS$作为$USER24$ SSH密钥,但我仍然得到错误。 (私钥在基础框中的〜nagios/.ssh中,公钥在远程主机上的〜/ $ USER24 $ /。ssh中)

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

回答

13

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

最终命令:

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

-t 60 -l “$ $ USER24” -C “/ TMP /测试” -E

最终输出:

Hello World

+0

这对我来说也是一样的;在我的具体情况中,我使用'sshpass'封装'check_by_ssh'(由于托管不允许SSH文件访问密钥文件,所以这是一个不幸的必要) – STW

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

我试过,但我仍然收到错误。我在我的问题中添加了一些信息。 – Connor

+1

@康纳你尝试手动运行?例如:'check_by_ssh -i/path/to/private-key -h 192.168.1.1 -u username' –

3

你必须首次手动运行该命令,因为它提出了一个问题,你必须回答yes。之后,它不再需要互动。

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

+0

这个答案是正确的。如果您知道哪个用户正在运行命令,并且您的密钥位于默认位置(例如,如果nagios是用户并且您使用rsa密钥,那么您不需要指定密钥),〜nagios/.ssh/id_rsa )。 – Peter

6

如果因为你被要求验证密钥真实性check_by_ssh失败,你可以在你的check_by_ssh选项禁用严格主机键检查就像您可以用ssh客户端。这是一个小的安全牺牲,但如果你是一个值得信赖的专用网络上,权衡是可以忽略的,你从来没有来验证您希望继续连接,即使是第一次尝试:

/usr/lib/nagios/plugins/check_by_ssh -l nagios -o StrictHostKeyChecking=no 
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 
... 
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

1

我已经找到了答案。

为了跳过的信息之后,该横幅添加文件 “配置” 你的.ssh目录中的Nagios服务器

猫配置 的LogLevel = QUIET

搭配chmod 600配置

上将被跳过,Nagios的检查将不-E标志

问候工作 波格丹

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" 
}