【问题标题】:Groundwork / Nagios' check_by_ssh is returning "Remote command execution failed"Groundwork / Nagios 的 check_by_ssh 正在返回“远程命令执行失败”
【发布时间】:2011-06-21 21:02:24
【问题描述】:

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

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

【问题讨论】:

    标签: ssh ssh-keys nagios


    【解决方案1】:

    由于某种原因,添加“-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/test" -E

    最终输出:

    你好世界

    【讨论】:

    • 这对我也有用;在我的具体情况下,我将 check_by_sshsshpass 包装在一起(不幸的是,由于托管不允许密钥文件用于 SSH 访问)
    【解决方案2】:

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

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

    【讨论】:

    • 这显然会降低您的安全性,更好的选择可能是清除 icinga / nagios 服务器上的 known_hosts 文件
    【解决方案3】:

    在我的情况下,错误是由于更新了 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 中的 Match 选项将 nagios 用户排除在显示横幅之外:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 这个答案是正确的。如果您知道哪个用户正在运行命令,则无需指定密钥,并且您的密钥位于默认位置(例如,如果 nagios 是用户并且您使用 rsa 密钥,~nagios/.ssh/id_rsa )。
        【解决方案6】:

        我找到了答案。

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

        猫配置 日志级别=安静

        chmod 600 配置

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

        问候 波格丹

        【讨论】:

          【解决方案7】:

          如果您已经设置了公钥,那么您必须在 SSH 命令中传递密钥,例如:

          command_line    $USER1$/check_by_ssh -i /usr/local/nagios/etc/keys/$HOSTNAME$ -H $HOSTADDRESS$ -t 60 -l "$USER24$" -C "cd tmp"
          

          确保公钥具有0600 的权限。

          【讨论】:

          • 我试过了,但我仍然收到错误消息。我在我的问题中添加了一些信息。
          • @Connor 你试过手动运行吗???喜欢:check_by_ssh -i /path/to/private-key -h 192.168.1.1 -u username
          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-02-14
              • 1970-01-01
              • 1970-01-01
              • 2020-12-22
              • 1970-01-01
              • 2015-01-27
              • 1970-01-01
              相关资源
              最近更新 更多