我正在尝试使用Perl模块Net :: Appliance :: Session ssh进入思科交换机,但由于预期提示的性质,我遇到了问题。 开关提示符如下
用户名:
所以当基本的用户名提示符预期不会被正确地返回。 看Net :: Appliance :: Session的文档,它谈到自定义提示,但我不确定如何实现它。 它指的是短语手册。
如果任何人有这样的例子可以实现,这将不胜感激。
为了避免交叉发帖,我昨天在perlmonks上问了一个类似的问题,这里是链接http://perlmonks.com/?node_id=1199230
提前致谢。
代码示例—
#!/usr/bin/perl use warnings; use strict; use Net::Appliance::Session; my $host = '<my_host>'; my $user = '<my_user>'; my $pass = '<my_password>'; my $session = Net::Appliance::Session->new( personality => 'cisco', host => $host, transport => 'SSH', ); $session->connect( username => $user, password => $pass ) or die "Cannot Connect! : $!"; my @output = $session->cmd('show version'); $session->close; print join("\n",@output);
我已经改变了我的代码使用一个自定义的短语,如描述Net :: CLI :: Interact :: Phrasebook
我的短语书籍文件如下所示:
prompt user match /[Uu]ser\s*[Nn]ame:\s*?$/ prompt pass match /[Pp]assword: ?$/ prompt prompt match / ?$/ prompt basic match /> ?$/ macro paging send terminal length %s
我的更新脚本如下所示:
#!/usr/bin/perl use warnings; use strict; use Net::Appliance::Session; my $host = '<my_host>'; my $user = '<my_user>'; my $pass = '<my_password>'; my $session = Net::Appliance::Session->new({ add_library => '/home/edunn/switch', personality => 'custom', transport => 'SSH', host => $host, connect_options => { opts => [ '-q', ], }, }); $session->set_global_log_at('debug'); $session->connect($user,$pass ) or die "Cannot Connect! : $!"; my @output = $session->cmd('show version'); $session->close; print join("\n",@output);
但现在我得到以下错误
[0.001516] pfind提示
[0.006937]为ssh创buildNet :: Telnet包装器
[0.007171] t命令展开为:ssh -o StrictHostKeyChecking = no -o UserKnownHostsFile = / dev / null -o CheckHostIP = no -q -l cisco 192.168.2.17
[1.325789] d SEEN:
[1.341702] p短语手册/ home / edunn / switch / custom / login
[1.342318] p存储提示用户
[1.343439] p存储提示传递
[1.344178] p存储提示提示
[1.344881] p存储提示基本
[1.345578] p存储macros寻呼
[1.346353] p不,不(基本)匹配
[1.346577]否认,还没有()通过
[1.346789]没有,不(用户)匹配
[1.347021] p命中,比赛提示提示
[1.347718] p提示已被设置为(?-xism:?$)
[1.348436] e运行macros分页
[1.348655] emacros的参数是:0
[1.349293]执行动作
[1.349814]调度执行方法
[1.350736]收到发送callback
[1.350957] t排队发送数据:“terminal长度0”
[1.351277]callback收到匹配
[1.351576] d SEEN:
[1.351772]输出匹配(?-xism:?$),存储并返回
[1.352222] p设置新提示(?-xism:?$)
[1.352437] p提示已被设置为(?-xism:?$)
[1.353120]运行macros分页
[1.353323]macros观参数是:24
[1.353860]执行动作
[1.354344]调度执行方法
[1.355083]收到发送的回叫
[1.355290]发送排队数据:“terminal长度24”
[1.355535]收到匹配的回叫
[1.438431] d SEEN:
Ť
[1.438731] t输出匹配(?-xism:?$),存储并返回
[1.439212] p设置新提示(?-xism:?$)
[1.439426] p提示已被设置为(?-xism:?$)
看看这个错误,它看起来像是匹配用户名:和密码:但是,然后它不能find所谓的提示,我不知道它从哪里拿起它。
感谢您的期待。
从我看到的短语手册
最后一个基本的提示符当然是一个简单的命令行提示匹配,这应该被命名为通用的。
# example only! prompt generic match /> ?$/
添加应该照顾你当前的问题。
我寻找他们如何处理inheritance,所以你可以得到所有的现有的东西,如免费的基本提示。 我最好的猜测是它是基于目录结构。 如果您将custom目录与其pb放置在cisco下面的目录中,可以使用其pb或其副本。
它看起来像从短语文档 , personality => 'cisco'是一种普遍的。 你可能会更好运气与IOS或其他变种之一。 我不太熟悉思科的血统,所以你应该寻找对你最有意义的事情。
但经过进一步的检查可能没有多大帮助。 从源代码看来,它正在寻找Username username或username ,但不是User Name 。 你可以改变提示符合其中一个正在寻找?