Модуль Perl Net :: SSH2 не работает в списке устройств - PullRequest
0 голосов
/ 15 декабря 2011

Я новичок в Windows Perl и пытаюсь использовать Net :: SSH2 на Strawberry Perl .проблема у меня скрипт не может подключиться к списку устройств.Я могу подключиться к первому устройству в списке, но не могу подключиться ко второму, третьему и т. Д.я что-то пропустил.спасибо за любое предложение.

#!\usr\bin\Perl\bin\perl

use warnings;
use strict;
use NET::SSH2;
use MIME::Base64;

my $host = "C:/temp/devices.txt"; # input file
my $user = "XXX"; # your account
my $pass = "XXXXX"; # your password  64 bit mime
my $ssh2 = Net::SSH2->new();
my $result = "C:/temp/result.txt"; # output file

$ssh2->debug(1); # debug on/off

open(List, '<', "$host") or die "$!";
while(<List>) {
    chomp $_;
    unless ($ssh2->connect("$_")) {
        print "Unable to connect : $_\n";
        next;
    }

    my $dp=decode_base64("$pass");

    unless ($ssh2->auth_password("$user","$dp")) {
        print "Invalid Password\n";
        exit;
    }

    my $chan = $ssh2->channel();
    $chan->exec('sh ver');

    my $buflen =100000;
    my $buf = '0' x $buflen;
    my $read = $chan->read($buf, $buflen );

    warn 'More than ', $buflen, ' characters in listing' if $read >= $buflen;

    open (OUTPUT, '>>', $result) or die "$!";
    print OUTPUT "HOST: $_\n\n";
    print OUTPUT "$buf\n";
    print OUTPUT "\n\n\n";
    print OUTPUT

    $chan->close();
}

close (List);

Ответы [ 5 ]

1 голос
/ 15 декабря 2011

Вам необходимо создать объект Net :: SSH2 внутри цикла, поскольку невозможно использовать один объект Net :: SSH2 для подключения к нескольким хостам (или для выполнения нескольких подключений к одному и тому же хосту).

1 голос
/ 15 декабря 2011

Вызов $ ssh-> disconnect () после $ chan-> close ();

0 голосов
/ 19 июня 2013

Проще говоря my $ ssh2 = Net :: SSH2-> new (); в цикле while.

0 голосов
/ 16 декабря 2011
   #!\usr\bin\Perl\bin\perl
   use strict;
   use Term::ReadKey;
   use NET::SSH2;
   use MIME::Base64;
   use constant BUFLEN => 10_0000 ;
   my $user = "XXX"; # your account
   my $pass = "XXXX"; # your password  64 bit mime
   my $dp=decode_base64("$pass");
   my $host = "C:/temp/devices.txt"; # input file
   my $Error = "C:/temp/Error.txt"; # Error file
   open(HOST, '<', "$host") or die "$!";
   open STDERR, ">", "$Error"; # open log file
           while(<HOST>) {
              chomp $_;
   my $ssh2 = Net::SSH2->new();
   $ssh2->debug(1); # debug on/off
           unless ($ssh2->connect("$_")) {
           print "Unable to connect : $_\n";
   print STDERR "Unable to connect to $_: $!\n"; # write the error on log file
   print STDERR
   "*****************************************************\n\n";
           next;
           }
        print "connecting to $_\n";
         unless ($ssh2->auth_password("$user","$dp")) {
         print "Invalid Password\n";
         exit;
            }
   my $chan = $ssh2->channel;
         $chan->exec('sh int desc');
              my $buf;
              my $read = $chan->read($buf, BUFLEN );
   warn 'More than ', BUFLEN, ' characters in listing' if $read >= BUFLEN;
   open (OUTPUT, ">", "C:/temp/$_.txt")or die "$!"; # new file for each devices
   print OUTPUT "HOST: $_\n\n";
   print OUTPUT "$buf\n";
   print OUTPUT "\n\n\n";
   print OUTPUT

   $chan->close();
   }
   close HOST;
0 голосов
/ 15 декабря 2011

Не выходить () при ошибке аутентификации; используйте «next» для перехода к следующему элементу списка.

...