2017-10-05 52 views
0

我遇到了这个“显示版本”命令在思科路由器的问题,我需要前进到下一个屏幕,按下当出现“ - more more--”时键。从xx.xx.xxx.xxxphpseclib ssh2 pty telnet思科 - 如何推进 - 更多 - 在“显示版本”

限制获得用户认可星期三10月4日15点41分46秒2017年:按照代码:

function showVersion($ssh, $ansi){ 
    $ssh->enablePTY(); 
    $ssh->write("show version\n"); 
    //$ssh->exec("show version"); 

    $prompt_saida = ""; 

    $ssh->setTimeout(3); 
    $prompt_temp = $ssh->read('#--More--|\[>\]#', NET_SSH2_READ_REGEX); 
    $prompt_saida = $prompt_temp; 

    $ssh->setTimeout(3); 
    while($prompt_temp = $ssh->read('#--More--|\[>\]#', NET_SSH2_READ_REGEX)){ 
     $ssh->setTimeout(3); 
     $prompt_saida.= $ssh->read(NET_SSH2_READ_REGEX); 
       if (!preg_match('#--More--$#', $prompt)) {    break;   } 
     $ssh->write(' '); 
     $ssh->setTimeout(3); 
    } 
    return $prompt_saida; 
    //$ssh->write("terminal length 0\n"); 
    //$ssh->write("\n"); 

    $ssh->setTimeout(3); 
    //$ssh->read(); 
    //$ssh->getLog(); 
    $ansi->appendString($ssh->read()); 

} 

上次登录。 [xxxxxxxxxx [xxx @ [34; 1mPRA-xxxxxxxx [xxxx> [xxx

Authenticated Successfully! “

”不要忘记在NVRAM上保存路由器配置,固化更改后!“

xxxxx_xxxx_xx>显示版本 bash下显示:命令未找到 [XXXXXXXXXX [XXX @ [34; 1mPRA-XXXXXXXX [ⅩⅩⅩⅩ> [XXX

$ssh->exec("show version");

上次登录:星期三15年10月4日:41:46 2017 from xx.xx.xxx.xxx

限制访问授权用户。 [xxxxxxxxxx [xxx @ [34; 1mPRA-xxxxxxxx [xxxx> [xxx

Authenticated Successfully! “

”不要忘记在NVRAM上保存路由器配置,固化更改后!“

xxxxx_xxxx_xx> /斌/庆典:显示:找不到命令

你能帮我吗?我会非常感激!

我也想知道在屏幕上显示路由器日志的最佳方式:

$ssh->read(); 
$ssh->read(NET_SSH2_READ_REGEX); 
$ssh->getLog(); 
$ansi->getScreen(); 

谢谢

回答

0

我需要通过按某个键“前进到下一个屏幕 - 显示更多 - “出现。

该代码正在查找“--More--” - 而不是“--show more--”。也许这就是你的意思?

另外,你在做$prompt_saida.= $ssh->read(NET_SSH2_READ_REGEX);。也许试试$prompt_saida.= $ssh->read();。正如你基本上等待2号(因为NET_SSH2_READ_REGEX由define('NET_SSH2_READ_REGEX', 2);定义露面和2不等于 - 更多 - 所以它可能导致break过早调用。

xxxxx_xxxx_xx > /斌/庆典:显示:找不到命令

你得到,这让我怀疑,如果你真正能够做到“秀版”,甚至用SSH像腻子或OpenSSH的事实。如果没有,那么这个问题与phpseclib没有任何关系,并且讨论它可能会让你从可以帮助你的Cisco IOS(?)专家中分散注意力,也就是说,他们在看到所有人后可能会停止阅读PHP代码。

我也想知道在屏幕上显示路由器日志的最佳方式:

我想这会取决于你如何定义最好的,但如前所述,$ssh->read(NET_SSH2_READ_REGEX)不做你认为它确实如此的事情。 $ssh->read('#pattern#', NET_SSH2_READ_REGEX)但不是$ssh->read(NET_SSH2_READ_REGEX)

$ssh->getLog()只有在启用了日志功能的情况下才会执行操作(例如,define('NET_SSH2_LOGGING', 2))。它还显示未加密的SSH数据包,从密钥交换到频道开放等。这可能不是你想要的。

至于$ansi->getScreen() ......如果您不喜欢输出中的ANSI代码,则可以工作。你有一些。例如。 [xxxxxxxxxx[[email protected][34;1mPRA-xxxxxxxx[xxxx> - 即@[34;1m位是ANSI。

或许也值得玩$ansi->getHistory()

相关问题