2013-10-25 116 views
0

我想写一个perl代码telnet到交换机,然后运行命令。 下面是代码Perl脚本无法telnet到我的交换机

my $device = "1.2.3.4"; 

my $session = Net::Telnet->new(Host => "$device", 
Input_log => "switchevi.log", 
    ); 
$session->login('', 'intosh123'); 

# Execute a command 
my @output = $session->cmd('show run'); 
print "@output\n"; 
$session->close; 

开关不具有用户名。所以只要你登录,你会得到一个密码提示。

当我执行这个脚本,它给了我像

timed-out waiting for login prompt at switch.pl line 12 

一个错误,就是这条线

$session->login('', 'intosh123'); 

请让我知道是怎么回事。

回答

0
约登录方法CPAN文档

此方法通过等待一个登录提示 并用$用户名响应,然后等待密码提示 并用$密码响应执行标准的登录,以及然后等待命令 解释器提示。如果由远程端 发送的任何提示与期望的不符,则此方法将超时,除非关闭了超时 。
...
考虑将print()和waitfor()的组合作为 作为替代此方法的替代方法。 远程主机不会提示输入用户名。

所以尝试这样的事情,insteed的$session->login('', 'intosh123');

$t->waitfor('/password: ?$/i'); #here goes regex to match your password propmt 
$t->print($passwd); 

也不要忘记设置正确的默认提示正则表达式:

my $t = Net::Telnet->new(Timeout => 10, 
         Prompt => '/your regex goes here/'); 

并使用调试选项时出了差错