Perl cgi:在远程计算机上运行命令

时间:2015-01-21 09:58:43

标签: perl shell cgi solaris

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

我有一个在solaris服务器上运行的cgi webserver,我没有直接连接到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”服务器的密钥添加到webserver的信任存储区。是否有任何方法可以在远程计算机上运行命令?

此外,这个网络服务器安装在solaris机器'sun-util'上,我可以从ssh到'sun-rm'。但是由于上面提到的原因,无法建立从网络服务器到'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

1 个答案:

答案 0 :(得分:1)

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

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

但首先你真的想确定为什么主机密钥无效 - 这可能是个坏消息。 (更有可能是服务器重建,集群迁移或类似的东西,但确实需要付费才能检查)