我有一个perl-cgi脚本,它执行SSH到远程服务器并执行命令,现在我想将这个打开的ssh会话传递给另一个执行命令的perl-cgi脚本。我不想在新脚本中建立另一个SSH会话。 我使用的是Net :: SSH :: Expect,我不允许使用Net :: OpenSSH。 我尝试使用HTTP GET方法将第一个脚本中创建的Net :: SSH :: Expect对象传递给第二个脚本,但它不起作用。 这是第一个执行SSH到远程服务器的脚本。
my $ssh = Net::SSH::Expect-> new (
host => $honame,
password => $password,
user => $name,
raw_pty => 1,
timeout => 4
);
open (MYFILE, '>filedata.txt');
my $login_output=$ssh->login();
chomp $command;
print MYFILE $ssh->exec("grep -d recurse -l ".$ipaddr." /local/configs/gis/extranet/apjc");
#$ssh->close;
close(MYFILE);
my $file = 'filedata.txt';
open my $info, $file or die "Could not open $file: $!";
#print header();
#print "Content-type: text/html\n\n";
print $q->header;
print $q->start_html(-title => 'File List');
print "<center><h1>Server Results </h1></center>";
print "<hr>";
#print "<form action="/cgi-bin/login_process.pl">";
print $q->start_form(
-name => 'main_form',
-method => 'POST',
-enctype => &CGI::URL_ENCODED,
-onsubmit => 'return javascript:validation_function()',
-action => '/cgi-bin/text_replace.pl', # Defaults to
# the current program
);
print "<table border=1>";
while( my $line = <$info>)
{
if ($line !~ /Permission denied/)
{
print "<tr>";
print "<td>";
print $line ." \n";
#print "<input type="checkbox" name="vehicle" value="Bike">I have a bike<br>"
print "</td>";
print "<td>";
print checkbox('checkbox$i',1,$line,'File Replace ');
print "</td>";
print "<td>";
print "<a href=\"http://localhost/cgi-bin/file_view.pl?variable=$line,$ssh\">View File Contents </a>";
print "</td>";
#print "<hr>";
$i++;
print "</tr>";
}
}
print "</table>";
#print "</form>";
print $q->submit(
-name => 'submit_form',
-value => 'Click here!',
-onsubmit => 'javascript: validate_form()',
);
print $q->end_form;
第二个脚本是
#!"C:\cygwin64\bin\perl.exe"
use CGI qw(:cgi-lib :standard);
use Net::SSH::Expect;
my $q=new CGI;
print $q->header;
print $q->start_html(-title => 'File Contents');
#print $q->param('variable');
my @values = split(',', $q->param('variable'));
my $ssh=$valaues[1];
print $ssh->exec('ifconfig');
答案 0 :(得分:1)
在main中建立会话。在子程序中执行处理。
在自己的包中定义每个子例程。在主脚本中包含这些包。现在,所有处理逻辑都在一个运行时中。
将SSH会话对象传递给子例程。