Perl ssh-операции за один сеанс - PullRequest
4 голосов
/ 05 марта 2012

В следующем коде я пытаюсь подключиться к другой машине по 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 ]

2 голосов
/ 05 марта 2012

Попробуйте вместо этого использовать Net::SSH::Expect. На связанной странице есть пример кода для сеанса SSH.

1 голос
/ 05 марта 2012
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");
}

Просто используйте "'\''" там, где вы обычно используете "'".

1 голос
/ 05 марта 2012

В чем проблема?Просто продолжайте посылать команды на удаленную сторону через объект $ssh_delete.

И кстати, в настоящее время существуют лучшие модули для SSH, такие как Net :: OpenSSH или Net ::SSH2 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...