2017-10-05 80 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()

相關問題