Perl脚本无法telnet到我的交换机

时间:2013-10-25 06:56:39

标签: perl switch-statement telnet cisco

我正在尝试编写一个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');

请让我知道发生了什么。

1 个答案:

答案 0 :(得分:0)

来自cpan docs关于登录方法:

  

此方法通过等待登录提示执行标准登录   并使用$ username进行响应,然后等待密码提示   并使用$ password响应,然后等待命令   口译员提示。如果远程端发送了任何提示   与预期不匹配,此方法将超时,除非超时   被关闭了。   
...
  考虑使用print()和waitfor()的组合作为   当它不能满足您的需求时,可替代此方法,例如:该   远程主机不会提示输入用户名。

所以尝试这样的事情,$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/');

出现问题时使用调试选项