0

我正在尝试编写一个 perl 代码来远程登录到交换机,然后运行命令。这是代码

 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');

请让我知道发生了什么事。

4

1 回答 1

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/');

并在出现问题时使用调试选项

于 2013-10-25T07:15:01.173 回答