phpseclib ssh2 pty telnet cisco - 如何在 "show version" 中推进 --more--
phpseclib ssh2 pty telnet cisco - how to advance --more-- in "show version"
我在 cisco 路由器上使用这个 "show version" 命令时遇到问题,我需要在出现“--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
认证成功!
"DO NOT FORGET SAVE ROUTER CONFIGURATION ON NVRAM, AFTER CONSOLIDATING THE ALTERATIONS !!"
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
认证成功!
"DO NOT FORGET SAVE ROUTER CONFIGURATION ON NVRAM, AFTER CONSOLIDATING THE ALTERATIONS !!"
xxxxx_xxxx_xx>/bin/bash:显示:未找到命令
你能帮我吗?我将不胜感激!
我还想知道在屏幕上显示路由器登录的最佳方式:
$ssh->read();
$ssh->read(NET_SSH2_READ_REGEX);
$ssh->getLog();
$ansi->getScreen();
谢谢
I need to advance to the next screen by pressing a key when "--show more--" appears.
代码正在寻找“--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: show: command not found
你得到这个的事实让我想知道你是否真的能够 "show version" 即使使用像 PuTTY 或 OpenSSH 这样的 SSH 客户端。如果不是,则此问题与 phpseclib 无关,讨论它可能会分散您对可以帮助您的 Cisco IOS (?) 专家的注意力。 IE。他们可能在看到所有 PHP 代码后就停止阅读了。
I would also like to know the best way to show the router log on screen:
我想这取决于您如何定义最佳,但如前所述,$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[xxx@[34;1mPRA-xxxxxxxx[xxxx>
- @[34;1m
位是 ANSI。
与 $ansi->getHistory()
一起玩可能也值得。
我在 cisco 路由器上使用这个 "show version" 命令时遇到问题,我需要在出现“--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
认证成功!
"DO NOT FORGET SAVE ROUTER CONFIGURATION ON NVRAM, AFTER CONSOLIDATING THE ALTERATIONS !!"
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
认证成功!
"DO NOT FORGET SAVE ROUTER CONFIGURATION ON NVRAM, AFTER CONSOLIDATING THE ALTERATIONS !!"
xxxxx_xxxx_xx>/bin/bash:显示:未找到命令
你能帮我吗?我将不胜感激!
我还想知道在屏幕上显示路由器登录的最佳方式:
$ssh->read();
$ssh->read(NET_SSH2_READ_REGEX);
$ssh->getLog();
$ansi->getScreen();
谢谢
I need to advance to the next screen by pressing a key when "--show more--" appears.
代码正在寻找“--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: show: command not found
你得到这个的事实让我想知道你是否真的能够 "show version" 即使使用像 PuTTY 或 OpenSSH 这样的 SSH 客户端。如果不是,则此问题与 phpseclib 无关,讨论它可能会分散您对可以帮助您的 Cisco IOS (?) 专家的注意力。 IE。他们可能在看到所有 PHP 代码后就停止阅读了。
I would also like to know the best way to show the router log on screen:
我想这取决于您如何定义最佳,但如前所述,$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[xxx@[34;1mPRA-xxxxxxxx[xxxx>
- @[34;1m
位是 ANSI。
与 $ansi->getHistory()
一起玩可能也值得。