2012-03-05 2 views
4

В следующем коде я пытаюсь передать ssh на другой компьютер и проверить, существует ли этот файл или нет.
Если файл существует, тогда мне нужно проверить, является ли человек, обращающийся к файлу, создателем этого файла, то есть его имя пользователя находится в файле журнала.
Если присутствует, тогда мне нужно удалить этот файл. Как я могу добиться этого с одного входа т.е., пользователь будет вводить свой пароль только один разОперации 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 

    } 

ответ

2

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

1

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

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

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"); 
} 

Просто используйте « '\'' » где вы обычно используете « ' ».

+0

Могу ли я получить статус возврата или некоторый статус для команд, которые выполняются в сеансе SSH? – Rajeev

+0

Вы имеете в виду код выхода, который вы размещаете в '$ exit'? ('exit (0)' является значением по умолчанию. Он будет отличным от нуля, если ваш код умирает. Вы также можете вызвать 'exit (1)' on error.) Вы также можете «распечатать» сообщения, которые попадут в ' $ stdout'. – ikegami

+0

Как вызвать exit (1) в случае какой-либо ошибки.can u указать пример? – Rajeev

Смежные вопросы