使用 Net::Appliance::Session 编写思科横幅脚本
Scripting the cisco banner with Net::Appliance::Session
有人 运行 了解这个问题吗?当脚本到达横幅文本时,脚本就会挂起。
我正在使用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;
};
如果您在发送新命令之前查看与提示匹配的正则表达式,您会发现它需要一个与路由器的用户、特权或配置模式密切匹配的特定字符串。
当您发送 banner login +
命令时,您会收到来自路由器的 Enter TEXT message. End with the character '+'
后跟空行(而不是您的脚本所期望的 Router(config)#
。过了一会儿它就超时了因为没有正则表达式的匹配项。
最简单的解决方案是尝试在一个命令中发送整个横幅。尝试将您的横幅与一个字符串中的 \r
连接起来,并将其作为一个命令发送,如下所示(注意双引号):
$session_obj->cmd("banner login + line1 \r line2 \r line3\r +");
花了太长时间才弄清楚...空间不是你的朋友。
$session_obj->cmd("banner login + \rline1\rline2\rline3\r+");
我的原始问题示例:
$session_obj->cmd('*************************************************************************\r* test *\r* *\r*************************************************************************');
有人 运行 了解这个问题吗?当脚本到达横幅文本时,脚本就会挂起。
我正在使用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;
};
如果您在发送新命令之前查看与提示匹配的正则表达式,您会发现它需要一个与路由器的用户、特权或配置模式密切匹配的特定字符串。
当您发送 banner login +
命令时,您会收到来自路由器的 Enter TEXT message. End with the character '+'
后跟空行(而不是您的脚本所期望的 Router(config)#
。过了一会儿它就超时了因为没有正则表达式的匹配项。
最简单的解决方案是尝试在一个命令中发送整个横幅。尝试将您的横幅与一个字符串中的 \r
连接起来,并将其作为一个命令发送,如下所示(注意双引号):
$session_obj->cmd("banner login + line1 \r line2 \r line3\r +");
花了太长时间才弄清楚...空间不是你的朋友。
$session_obj->cmd("banner login + \rline1\rline2\rline3\r+");
我的原始问题示例:
$session_obj->cmd('*************************************************************************\r* test *\r* *\r*************************************************************************');