【问题标题】:Perl cgi : running commands on a remote machinePerl cgi:在远程机器上运行命令
【发布时间】:2015-03-19 19:06:46
【问题描述】:

我需要在浏览器上查看 DataPower 服务的当前状态。为此,我在 solaris 机器上开发了一个 perl cgi 脚本。

我在 Solaris 服务器上运行了一个 cgi 网络服务器,我无法从该服务器直接连接到 DataPower 设备。因此,我通过脚本连接到远程 Solaris 服务器“sun-rm”,该服务器连接到 DataPower设备。

使用脚本中的以下两个语句,我尝试在远程服务器“sun-rm”上运行命令,这将获取 daatpower 服务的当前统计信息。

system('ssh root@sun-rm "cd /tmp/dp/status; ./getstatus"'); system('scp -rp root@sun-rm:/tmp/dp/status/DPlive_Status /opt/webserver/https-util/cgi-bin2/datapower/');

但似乎网络服务器无法与“sun-rm”服务器建立安全连接,因为我可以在错误日志中看到以下错误。

Host key verification failed.

现在,由于某些安全原因,我将“sun-rm”服务器的密钥添加到网络服务器的信任库中。有什么方法可以在远程机器上运行命令?

此外,这个网络服务器安装在 solaris 机器“sun-util”上,我可以通过它对“sun-rm”进行 ssh。但是由于上述原因,无法建立从 webserver 到 'sun-rm' 的 ssh 连接。

我可以理解这可能有点令人困惑,如果需要更多解释,请告诉我?

我开发的脚本如下:

#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

    printf "Content-type: text/html\n\n";

    print <<HTML;
     <HTML>
     <HEAD>
         <TITLE>DataPower_Status</TITLE>
    </HEAD>
      HTML

    system('ssh root@sun-rm "cd /tmp/dp/status; ./getstatus"');
    system('scp -rp root@sun-rm:/tmp/dp/status/DPlive_Status     /opt/webserver7/https-util/cgi-bin2/datapower/');

 chmod(0777, '/opt/webserver7/https-util/cgi-bin2/datapower/DPlive_Status');

 open (FILE, "DPlive_Status") or die "could not open filename";
   while(<FILE>) {
     if ($_ =~ m/^Service/)
       {
           printf "<TR><TD><H4>$_</H4></TD></TR>\n";

       }
       else {

           printf "<TR><TD><p>$_</p></TD></TR>\n";
       }
      }
    close FILE;

       print <<HTML;
          </body>
          </html>
           HTML

【问题讨论】:

    标签: perl shell cgi solaris


    【解决方案1】:

    这是一个 SSH 错误,这意味着缓存的主机密钥身份无效。如果您有一个具有不同 ssh 主机密钥的集群,这通常会发生 - 您的客户端在 .ssh/known_hosts 中缓存该主机名的密钥。

    第一个解决方法是从known_hosts 中删除密钥,然后重试。第二种解决方法是启用 ssh 选项以禁用严格的主机密钥检查。 StrictHostKeyChecking=no

    但首先,您真的想确定主机密钥为何无效 - 这可能是个坏消息。 (更有可能是服务器重建、集群迁移或类似的事情,但检查确实值得)

    【讨论】:

    • -1 建议禁用主机密钥检查。这真的不是一个好主意。为什么我们不再使用 telnet?还有其他可能性,例如知道所有主机密钥或在所有集群节点之间共享一个主机密钥。
    • 因为 telnet 以明文形式发送所有内容,而 ssh 没有呢?因为 telnet 不允许 ssh 不允许的公私钥身份验证?禁用主机密钥检查是有风险的,是的。与所有风险一样,您需要评估是否值得承担。
    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多