[英]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.