Net :: Telnet eof读取等待登录提示:在test.pl第25行

时间:2014-06-19 17:08:13

标签: perl

我的代码在下面提供以供参考

#!/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;错误。 任何帮助将不胜感激,谢谢。

2 个答案:

答案 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
!