Добрый день!
Народ помогите, в сложившейся проблеме.
Есть необходимость выполнять команду на удаленном сервере через ssh.
Для этой цели был поставлен Net::SSH (_НЕ_ Net::SSH::Perl, его, к сожалению, поставить не удалось).
В пакете есть функции:
sshopen2('user@hostname', $reader, $writer, $command);
sshopen3('user@hostname', $writer, $reader, $error, $command);При использовании sshopen2 - все корректно работает, вот скрипт:
#!/usr/bin/perl
use Net::SSH qw(sshopen2);
use strict;
my $user = "smartfe";
my $host = "192.192.192.9"; #этот хост существует
my $cmd = "df -h";
sshopen2("$user\@$host", *READER, *WRITER, "$cmd") || die "ssh: $!";
while (<READER>) {
chomp();
print "$_\n";
}
close(READER);
close(WRITER);
Однако, если возникла ошибка подключения - она валится в STDERR. Если использовать sshopen3 - то ошибку можно обработать при помощи $error и отправить в логи.
Но, если ошибки не возникает, так же нет никакого вывода команды df.
Я сделал вот так, но чувствую, что я не прав:
#!/usr/bin/perl
use Net::SSH qw(sshopen2 sshopen3);
use strict;
my $user = "smartfe";
my $host = "192.192.192.9";
my $cmd = "df -h -P| grep -v 'Filesystem'";
sshopen3("$user\@$host", *READER, *WRITER, *ERROR, "$cmd") || die "ssh: $!";
while (<READER>) {
my @val=split(" ", $_);
print $val[0].$val[1].$val[2].$val[3].$val[4].$val[5]."\n";
}
while(<ERROR>){
print $_;
}
close(READER);
close(WRITER);
close(ERROR);
Я в Perl откровенный лабух, но очень хочется научиться...
Попытался погуглить на эту тему - результатов нет, есть только пример из документации для sshopen2.
На этом форуме тоже ничего найти не удалось.
Помогите решить проблему.
Заранее спасибо.