2013-05-16 3 views
1

У меня возникли странные проблемы, и я хочу, чтобы добраться до нижней части этого:Perl SSH в устройство

У меня есть список из более чем 1000 CISCO устройств, которые мне нужно SSH в и запускать некоторые команды. Таким образом, в Perl у меня есть следующий код:

my $scon = Net::SSH::Perl->new("192.168.110.45"); 
$scon->login($username,$password); 
my ($stdout,$stderr,$exit)= $scon->cmd('show run'); 
print "\n$stdout\n"; 

И приведенный выше код работает, показывая мне результат, который мне нужен.

Но, когда я создаю цикл и пытаюсь ssh каждое устройство в цикле, я получаю $ stdout как пустое.

Ниже приведен код, который не работает:

my @allhosts = `cat hosts_ip.txt | cut -d',' -f2`; 
foreach my $ip (@allhosts) { 
    my $scon = Net::SSH::Perl->new($ip); 
    $scon->login($username,$password); 
    my ($stdout,$stderr,$exit)= $scon->cmd('show run'); 
    print "$stdout\n"; 
} 

Выходной сигнал сверху просто пустым - это ничего не возвращает.

Любые идеи, что я делаю неправильно?

+5

chomp @allhosts – frankc

+0

Вы должны попробовать [Net :: OpenSSH :: Parallel] (https://metacpan.org/module/Net::OpenSSH::Parallel) – salva

+0

Добавьте 'debug => true' в свой призыв к новый? – charlesbridge

ответ

0

Вы видели PSSH? Это скрипт Python, но он отлично работает для быстрого запуска нескольких команд на многих хостах. Возможно, это не совсем то, что вы ищете, если вы застряли в Perl, но похоже, что это может быть одноразовая задача.

Смежные вопросы