我需要在浏览器上查看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
答案 0 :(得分:1)
这是一个SSH错误,这意味着缓存的主机密钥标识无效。如果您有一个具有不同ssh主机密钥的群集,则通常会发生这种情况 - 您的客户端在.ssh/known_hosts
中缓存了该主机名的密钥。
首先解决方法是从known_hosts
删除密钥,然后重试。第二种解决方法是启用ssh选项以禁用严格的主机密钥检查。 StrictHostKeyChecking=no
但首先你真的想确定为什么主机密钥无效 - 这可能是个坏消息。 (更有可能是服务器重建,集群迁移或类似的东西,但确实需要付费才能检查)