Я выполняю некоторые команды на удаленном сервере, подключаясь с моего локального сервера. Для этого я подключаюсь к удаленному серверу с помощью 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
. Поэтому я ожидаю совпадения этого ключевого слова.
Мой вопрос -
- Почему я получаю вышеупомянутую ошибку?
- Предположим, что выполнение моей команды не удалось, вернется ли управление к моему сценарию? Поскольку он ожидает
$str
word.
Я сомневаюсь, что метод перехвата ошибок не является правильным. Пожалуйста, предложите лучшее решение.