我的代码在下面提供以供参考
#!/usr/bin/perl
use strict;
use Net::Telnet::Cisco;
my ($host, $port, $user, $pass, $command);
##### get host info
print 'Enter host: ';
chop($host = <STDIN>);
##### get port info
print 'Enter port: ';
chop($port = <STDIN>);
##### get user info
print 'Enter user: ';
chop($user = <STDIN>);
##### get user info & hide input
print 'Enter password: ';
system 'stty -echo';
chop($pass = <STDIN>);
system 'stty echo';
print "\n";
my $tn = new Net::Telnet(Host =>$host, Port =>$port, Timeout => 20)
or die "connect failed: $!";
$tn->open ($host);
$tn->login('','L@ser123');
$tn->login('$user','$pass');
my @out1 = $tn->print("sh run");
print "@out1\n";
我试图通过终端服务器控制台端口登录并执行命令,但面对&#34; eof读取等待登录提示:在test.pl第25行&#34;错误。 任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
您尝试登录两次:
$tn->login('','L@ser123');
$tn->login('$user','$pass');
第二次,登录提示已经消失,等待它的时间会超时。删除其中一行。
答案 1 :(得分:0)
您的问题是第一个->login
方法在返回之前等待提示。但是当通过终端服务器(TS)运行telnet时,您将永远无法在TS上获得正常提示,它将直接将您传递给控制台端口上的设备。
如果你想继续使用TS的当前配置,你可能必须使用->waitfor
一些聪明的东西,这是一个有时令人困惑的任务。
我建议你做的是重新配置TS不要验证telnet“pass-throughs”,毕竟连接到TS的设备必须用usrname / password组合保护。当您使用Net::Telnet::Cisco
时,我假设TS是Cisco设备。这是我们(非常旧的)2511 TS使用的配置,但这个概念也适用于更新的Ciscos:
aaa new-model
!
! normal authentication scheme (named 'default') for connections terminating
! ON THE TERMINAL SERVER (here via tacacs+)
aaa authentication login default tacacs+ local
aaa authentication enable default tacacs+ enable
!
! create an authentication scheme (named 'line_auth') with no authentication
aaa authentication login line_auth none
line 1 16
! disable access to the TS from the serial line side, i.e only allow
! *outgoing* connections
no exec
!
! use the 'line_auth' authentication scheme, i.e no authentication
login authentication line_auth
!
! only allow telnet connections to connect to the line
transport input telnet
!
line vty 0 4
! default authentication scheme (this is a default config, so it's
! actually not shown in the config).
login authentication default
!