2015-03-10 4 views
1

Я сделал свой сценарий, который подключается к моему коммутатору, но проблема в том, что при просмотре только часть говорит, остальное отображается как размер (--More). Как я могу сделать, чтобы просмотреть все настройки и спасибоОтображение части конфигурации (--Подробнее)

use Net::OpenSSH; 
use warnings; 
use Expect; 

my $password = 'admin'; 
my $enable = ''; 
my $ip = '192.16.25.39'; 
my $username='user'; 
my $ssh = Net::OpenSSH->new("$username:$password\@$ip", timeout => 200) ; 
$ssh->error and die "unable to connect to remote host: ". $ssh->error; 

my $output = $ssh->capture({stdin_data => "enable\n"."admin%\n"."show vlan"."\n"}); 

if ($output) {print $output . ' ';} 

my $line; 
print "\n"; 

# closes the ssh connection 
$ssh->close(); 

Я попытался это с модулем Expect:

use Net::OpenSSH; 
if ($output) { 
    print $output . ' '; 
    my $expect = Expect->init($output); 
    $expect->raw_pty(1); 
    #$expect->debug(2); 
    my $debug and $expect->log_stdout(1); 
    while(<$pty>) { 
     print "$. $_ " 
    } 
} 

, который производит эту ошибку:

Can't bless non-reference value at /usr/local/share/perl5/Expect.pm line 202 (#1) (F) Only hard references may be blessed. This is how Perl "enforces" encapsulation of objects. See perlobj. Uncaught exception from user code: Can't bless non-reference value at /usr/local/share/perl5/Expect.pm line 202. at /usr/local/share/perl5/Expect.pm line 202. Expect::exp_init("Expect", "\x{d}\x{a}witch>enable\x{d}\x{a}password:\x{d}\x{a}switch#show vlan\x{d}\x{a}\x{d}\x{a}VLA"...) called at b.pl line 19 "

+0

Выход «--More--» звучит так, будто он производится самим коммутатором в ответ на команду «show vlan». Я бы посмотрел, можете ли вы выполнить команду таким образом, чтобы коммутатор не дождался ввода клавиатуры перед возвратом. Если этого не может быть сделано, использование модуля [Expect с Net :: OpenSSH] (http://search.cpan.org/~salva/Net-OpenSSH-0.62/lib/Net/OpenSSH.pm#Expect) может быть полезным. –

+0

Я использовал Expect, но я столкнулся с проблемой :( – ahmed

+0

, когда я использую Expect, у меня есть это сообщение как вывод «не может благословить неосновное значение в/usr/local/share/perl5/expect .pl line 202» any решение – ahmed

ответ

3

Это может быть лучший подход к вашей проблеме. Существует модуль Net::Telnet::Cisco, который упрощает взаимодействие с удаленным маршрутизатором. По-видимому, вы можете сначала настроить зашифрованное SSH-соединение с помощью Net::OpenSSH, а затем использовать дескриптор файла из этого соединения, чтобы начать сеанс Net::Telnet::Cisco.

Так что я думаю, что что-то подобное было бы более перспективным, чем пытаться использовать Net::OpenSSH непосредственно:

use Net::OpenSSH; 
use Net::Telnet::Cisco; 

my $password = 'admin'; 
my $enable = ''; 
my $ip = '192.16.25.39'; 
my $username='user'; 
my $ssh = Net::OpenSSH->new("$username:$password\@$ip", timeout => 200) ; 
my ($pty, $pid) = $ssh->open2pty({stderr_to_stdout => 1}) 
    or die "unable to start remote shell: " . $ssh->error; 
my $cisco = Net::Telnet::Cisco->new(
       -fhopen => $pty, 
       -telnetmode => 0, 
       -cmd_remove_mode => 1, 
       -output_record_separator => "\r"); 
my @vlan = $cisco->cmd("show vlan"); 

Я не знаком с плюсами и минусами конфигурирования маршрутизаторов Cisco, так что вы должны принять его отсюда, но это выглядит для меня гораздо более легким путем, чтобы получить то, что вам нужно.

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