将一个打开的ssh会话从一个perl cgi脚本移动到另一个

时间:2014-06-19 06:40:31

标签: perl ssh cgi

我有一个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');

1 个答案:

答案 0 :(得分:1)

在main中建立会话。在子程序中执行处理。

在自己的包中定义每个子例程。在主脚本中包含这些包。现在,所有处理逻辑都在一个运行时中。

将SSH会话对象传递给子例程。