显示部分配置( - 更多)

时间:2015-03-10 14:09:54

标签: perl cisco-ios expect.pm

我制作了连接到我的交换机的脚本,但问题是当查看它只显示部分时,其余部分显示为大小( - 更多)。如何查看所有配置并谢谢

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 "$. $_ "
    }
}

产生此错误:

  

不能在/usr/local/share/perl5/Expect.pm第202行(#1)祝福非参考价值(F)只有硬参考才能得到祝福。这就是Perl强制执行的方式。封装对象。见perlobj。用户代码未被捕获的异常:不能在/usr/local/share/perl5/Expect.pm第202行保护非参考值。在/usr/local/share/perl5/Expect.pm第202行。期望: :exp_init(&#34;期待&#34;,&#34; \ x {d} \ x {a}女孩&gt;启用密码:\ x {d} \ x {a }转换#show vlan \ x {d} \ x {a} \ x {d} \ x {a} VLA&#34; ...)在b.pl第19行和第34行调用;

1 个答案:

答案 0 :(得分:3)

这可能是解决问题的更好方法。有一个Net::Telnet::Cisco模块可以简化与远程路由器的大量交互。显然,您可以先使用Net::OpenSSH设置加密的SSH连接,然后使用该连接中的文件句柄启动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");

我不熟悉配置思科路由器的细节,所以你必须从这里开始,但这对我来说就像是一个更容易获得你需要的路径。