簡體   English   中英

phpseclib ssh2 pty telnet思科-如何升級-更多—在“顯示版本”中

[英]phpseclib ssh2 pty telnet cisco - how to advance --more— in “show version”

我在Cisco路由器上使用此“顯示版本”命令時遇到麻煩,我需要在顯示“ --show more--”時按一個鍵,進入下一屏幕。 遵循代碼:

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());

}

上次登錄時間:2017年10月4日星期三15:41:46來自xx.xx.xxx.xxx

限制對授權用戶的訪問。 [xxxxxxxxxx [xxx @ [34; 1mPRA-xxxxxxxx [xxxx> [xxx

認證成功!

“合並變更后,不要忘記在NVRAM上保存路由器配置!”

xxxxx_xxxx_xx>顯示版本bash:顯示:找不到命令[xxxxxxxxxx [xxx @ [34; 1mPRA-xxxxxxxx [xxxx> [xxx

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

上次登錄時間:2017年10月4日星期三15:41:46來自xx.xx.xxx.xxx

限制對授權用戶的訪問。 [xxxxxxxxxx [xxx @ [34; 1mPRA-xxxxxxxx [xxxx> [xxx

認證成功!

“合並變更后,不要忘記在NVRAM上保存路由器配置!”

xxxxx_xxxx_xx> / bin / bash:顯示:找不到命令

你能幫我嗎 ? 我將非常感激!

我也想知道在屏幕上顯示路由器登錄的最佳方法:

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

謝謝

我需要在出現“ --show more--”時按一個鍵進入下一屏幕。

該代碼正在尋找“ --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不等於--More--因此可能會導致break被過早調用。

xxxxx_xxxx_xx> / bin / bash:顯示:找不到命令

您得到的事實使我想知道,即使使用PuTTY或OpenSSH之類的SSH客戶端,您是否真的能夠執行“顯示版本”。 如果不是,那么此問題與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) (例如define('NET_SSH2_LOGGING', 2) )。 它還顯示從密鑰交換到通道打開等未加密的SSH數據包。這可能不是您想要的。

至於$ansi->getScreen() ...,如果您不喜歡輸出中的ANSI代碼,則可以使用。 而且你有一些。 例如。 [xxxxxxxxxx[xxx@[34;1mPRA-xxxxxxxx[xxxx> - @[34;1m位是ANSI]。

$ansi->getHistory()一起玩可能也是值得的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM