有没有人遇到过这个问题?当脚本到达横幅文本时,脚本就会挂起。
我正在使用Net::Appliance::Session
这是我在调试中遇到的错误。脚本的其余部分完美地插入代码。我测试了我读到的关于在每行的横幅上添加#的内容。结果相同。
banner login +
[ 4.092880] tr nope, doesn't (yet) match (?-xism:[\/a-zA-Z0-9._\[\]-]+ ?(?:\(config[^)]*\))? ?[#>] ?$)
[ 4.093124] du SEEN:
banner login +
[ 4.093304] tr nope, doesn't (yet) match (?-xism:[\/a-zA-Z0-9._\[\]-]+ ?(?:\(config[^)]*\))? ?[#>] ?$)
[ 4.305872] du SEEN:
Enter TEXT message. End with the character '+'
[ 4.306121] tr nope, doesn't (yet) match (?-xism:[\/a-zA-Z0-9._\[\]-]+ ?(?:\(config[^)]*\))? ?[#>] ?$)
We had an issue when accessing the device : 10.49.216.74
The reported error was : read timed-out at /usr/lib/perl5/site_perl/5.10.0/Net/CLI/Interact/Transport/Wrapper/Net_Telnet.pm line 35
这是一段代码。
my $session_obj = Net::Appliance::Session->new(
host => $ios_device_ip,
transport => 'Telnet',
personality => 'ios',
timeout => 60,
);
#interace
$session_obj->set_global_log_at('debug');
eval {
# try to login to the ios device, ignoring host check
$session_obj->connect(
username => $ios_username,
password => $ios_password,
#SHKC => 0
);
# get our running config
$version_info = $session_obj->begin_privileged;
$session_obj->cmd('conf t');
$session_obj->cmd('line con 0');
$session_obj->cmd('exec-character-bits 8');
$session_obj->cmd('international');
$session_obj->cmd('line vty 0 4');
$session_obj->cmd('exec-character-bits 8');
$session_obj->cmd('international');
$session_obj->cmd('line vty 5 15');
$session_obj->cmd('exec-character-bits 8');
$session_obj->cmd('international');
$session_obj->cmd('exit');
$session_obj->cmd('no banner login');
$session_obj->cmd('banner login +');
$session_obj->cmd('*************************************************************************');
$session_obj->cmd('* test *');
$session_obj->cmd('* *');
$session_obj->cmd('*************************************************************************');
$session_obj->cmd('+');
$session_obj->cmd('no banner MOTD');
$session_obj->cmd('banner motd +');
$session_obj->cmd('*************************************************************************');
$session_obj->cmd('* test *');
$session_obj->cmd('* *');
$session_obj->cmd('*************************************************************************');
$session_obj->cmd('+');
$session_obj->cmd('exit');
$session_obj->cmd('write memory');
$session_obj->end_privileged;
# close down our session
$session_obj->close;
};
答案 0 :(得分:0)
如果在发送新命令之前查看与提示符匹配的正则表达式,您将看到它需要一个与路由器的用户,特权或配置模式紧密匹配的特定字符串。
当您发送banner login +
命令时,您会从路由器(而不是您的脚本所期望的Enter TEXT message. End with the character '+'
)获得Router(config)#
后跟空白行。过了一会儿它就会超时与正则表达式不匹配。
最简单的解决方案是尝试在一个命令中发送整个横幅。尝试将横幅与\r
连接在一个字符串中,并将其作为一个看起来像的命令发送(注意双引号):
$session_obj->cmd("banner login + line1 \r line2 \r line3\r +");
答案 1 :(得分:0)
花了太长时间来解决这个问题......空间不是你的朋友。
$session_obj->cmd("banner login + \rline1\rline2\rline3\r+");
我的原始问题示例:
$session_obj->cmd('*************************************************************************\r* test *\r* *\r*************************************************************************');