Perl ssh在一个会话中的操作

时间:2012-03-05 07:37:55

标签: perl

在下面的代码中,我试图ssh到另一台机器并检查文件是否存在。
如果该文件存在,那么我需要检查访问该文件的人是否是该文件的创建者,即他的用户名是否在日志文件中。
如果存在,那么我需要删除该文件。如何通过单次登录实现此目的,即用户只能输入一次密码

  $user = $ENV{USER};
  $il_check_cmd = "cat $shared_il_path/$il_name/info/.info_cat.log";
  my $ssh_delete = Net::SSH::Perl->new($hostname, protocol => '1,2', debug => 0, interactive => 1)        ;
  $ssh_delete->login($username, $password);
  ($stdout,$stderr,$exit) = $ssh_delete->cmd("$il_check_cmd");
  if((defined $stderr) && ($stderr =~ /No such file or directory/))
  {
     print "-E- $RUNCMD: \"$il_name\" you have entered does not exist in \"$shared_il_path\"!!        !\n";
     print "-E- $RUNCMD:                        or\n";
     print "-E- $RUNCMD: \"$il_name\" does not contain \".info_cat.log\" file!!!\n";
     print "-E- $RUNCMD: Exiting...\n";
     exit;
  }
  @content = split(/ /,$stdout);
  chomp($user_e = shift(@content));
  if($user_e =~ /\b$user\b/)
  {
            print "This is the user who created the file";
             //then remove the $shared_il_path/$il_name/info/.info_cat.log

   }

3 个答案:

答案 0 :(得分:2)

请考虑使用Net::SSH::Expect。链接页面包含SSH会话的示例代码。

答案 1 :(得分:1)

有什么问题?只需通过$ssh_delete对象继续向远程端发送命令。

顺便说一下,如今,有更好的SSH模块Net::OpenSSHNet::SSH2

答案 2 :(得分:1)

my ($stdout, $stderr, $exit) = $ssh->cmd(q{perl -e'
    my ($file_name) = @ARGV;

    ...
    Perl code that does what you want to do
    ...

    if (...some error...) {
       die("...error message...\n");
    }
' filename});

if ($exit) {
    # An error occurred.
    die("Error: $stderr");
}

只需使用«'\''»,您通常会使用«'»。