【问题标题】:Moving an open ssh session from one perl cgi script to the other将打开的 ssh 会话从一个 perl cgi 脚本移动到另一个
【发布时间】:2014-08-09 14:49:14
【问题描述】:

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

【问题讨论】:

  • 这行不通,抱歉。

标签: perl ssh cgi


【解决方案1】:

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

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

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

【讨论】:

  • 如何在同一个 perl cgi 脚本中执行另一个表单的处理?你能给出几个示例代码吗?谢谢
  • 没有。您必须将 ssh 连接作为服务器资源进行管理,这超出了 CGI 的范围,并且充满了安全隐患。
猜你喜欢
  • 2012-03-10
  • 2013-06-25
  • 2018-06-14
  • 1970-01-01
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多