我制作了连接到我的交换机的脚本,但问题是当查看它只显示部分时,其余部分显示为大小( - 更多)。如何查看所有配置并谢谢
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行调用;
答案 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");
我不熟悉配置思科路由器的细节,所以你必须从这里开始,但这对我来说就像是一个更容易获得你需要的路径。