我正在尝试编写一个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 :(得分: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/');
出现问题时使用调试选项