The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Net::SSH"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Net::SSH"  
Сообщение от dist (ok) on 15-Окт-08, 06:50 
Добрый день!
Народ помогите, в сложившейся проблеме.
Есть необходимость выполнять команду на удаленном сервере через 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.
На этом форуме тоже ничего найти не удалось.
Помогите решить проблему.
Заранее спасибо.

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

  • Net::SSH, dist, 11:01 , 15-Окт-08, (1)  
    • Net::SSH, NuINu, 13:06 , 15-Окт-08, (2)  
      • Net::SSH, dist, 14:38 , 15-Окт-08, (3)  
        • Net::SSH, NuINu, 14:56 , 15-Окт-08, (4)  
          • Net::SSH, dist, 19:45 , 15-Окт-08, (5)  

Сообщения по теме [Сортировка по времени | RSS]


1. "Net::SSH"  
Сообщение от dist (ok) on 15-Окт-08, 11:01 
Решилась проблема...
Вот таким образом:
#!/usr/bin/perl
use Net::SSH qw(sshopen2 sshopen3);
use strict;

my $user = "smartfe";
my $host = "192.192.192.22";
my $cmd = "df -h -P| grep -v 'Filesystem'";

sshopen3("$user\@$host", *READER, *WRITER, *ERROR, "$cmd") || die "ssh: $!";

my $err=<ERROR>;

if($err){
    print "ERR\n";
    print $err."\n";

}else{
    while(<WRITER>){
        print $_;
    }
}

close(READER);
close(WRITER);
close(ERROR);
После этого все заработало. Надеюсь, кому-нибудь это поможет...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Net::SSH"  
Сообщение от NuINu (??) on 15-Окт-08, 13:06 
>Решилась проблема...
>Вот таким образом:
>sshopen3("$user\@$host", *READER, *WRITER, *ERROR, "$cmd") || die "ssh: $!";

а где у вас авторизация? в упор не вижу. интересно.

можно было решить так:
sshopen2 "$user\@$host", *READER, *WRITER, $cmd || die "error conect ssh: $!\n";

if(<STDERR>) {
    print $_;
    print $_ until <STDERR>;
} else {
    while (<READER>) {
      chomp();
      print "$_\n";
    }
}


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Net::SSH"  
Сообщение от dist (ok) on 15-Окт-08, 14:38 
>>Решилась проблема...
>>Вот таким образом:
>>sshopen3("$user\@$host", *READER, *WRITER, *ERROR, "$cmd") || die "ssh: $!";
>
>а где у вас авторизация? в упор не вижу. интересно.

а ее и нет. Авторизация по ключам.
Спасибо за вариант. :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Net::SSH"  
Сообщение от NuINu (??) on 15-Окт-08, 14:56 
>>>Решилась проблема...
>>>Вот таким образом:
>>>sshopen3("$user\@$host", *READER, *WRITER, *ERROR, "$cmd") || die "ssh: $!";
>>
>>а где у вас авторизация? в упор не вижу. интересно.
>
>а ее и нет. Авторизация по ключам.
>Спасибо за вариант. :)

не за что, он не работает, когда ошибка. я не правильно написал.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Net::SSH"  
Сообщение от dist (ok) on 15-Окт-08, 19:45 
>не за что, он не работает, когда ошибка. я не правильно написал.

Опыт - сын ошибок трудных :) Мой работает точно - проверено :)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру