Невозможно вызвать метод «send» для неопределенного значения в - Net :: SSH :: Expect Perl error - PullRequest
0 голосов
/ 05 ноября 2019

Я выполняю некоторые команды на удаленном сервере, подключаясь с моего локального сервера. Для этого я подключаюсь к удаленному серверу с помощью Net::SSH::Expect модуля perl. Здесь устанавливается соединение, но иногда, когда я выполняю команду, появляется следующая ошибка -

Can't call method "send" on an undefined value at .....

Вот мой код:

my ($ip, $user, $passwd) = ("my.ip.address.here","user", "password");
my $ssh = SSH_Connection( $ip, $user, $passwd );

my $command_to_execute = "<Command to be executed will build here>";
print "$command_to_execute\n";
$str = 'Bye';
$ssh->send("$command_to_execute; echo $str");
$output = $ssh->waitfor($str, undef);
$ssh->close();
print "END\n";

sub SSH_Connection {
    my ( $host, $user, $passwd ) = @_;

    my $ssh = Net::SSH::Expect->new (
        host => $host, #ip
        user => $user, #'user'
        password => $passwd, #'password'
        raw_pty => 1,
        no_terminal => 0,
    );

    my $login_output;
    my $handledie = eval {
        $login_output = $ssh->login();
    };

    if ( $@ ) {
        if ($@ =~ m/SSHConnectionError/i ) {
            print  "SSH Connection Error\n";
        } elsif ( $@ =~ m/SSHProcessError/ix ) {
            print "SSH Process Error\n";
        } elsif ( $@ =~ m/SSHConnectionAborted/ix ) {
            print "SSH Connection Aborted\n";
        } else {
            print "SSH Unknown Error: $@\n";
        }
    }
    if ($login_output !~ /Last login/) {
        die "Login has failed.";
    } else {
        return $ssh;
    }
    print "SSH to ip - $host failed\n";
}

Сначала я собираю команду и сохраняюв переменной $command_to_execute.

В конце выполнения команды я получу ключевое слово Bye. Поэтому я ожидаю совпадения этого ключевого слова.

Мой вопрос -

  1. Почему я получаю вышеупомянутую ошибку?
  2. Предположим, что выполнение моей команды не удалось, вернется ли управление к моему сценарию? Поскольку он ожидает $str word.

Я сомневаюсь, что метод перехвата ошибок не является правильным. Пожалуйста, предложите лучшее решение.

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