phpseclib ssh2 pty telnet cisco - 如何推进 - 更多 - “show version”

问题描述 投票:0回答:1

我在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]

认证成功!

“在整合改动后,不要忘记在NVRAM上保存路由器配置!!”

xxxxx_xxxx_xx> show version bash:show:command not found [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:show:未找到命令

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

我还想知道在屏幕上显示路由器登录的最佳方法:

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

谢谢

php shell ssh cisco phpseclib
1个回答
0
投票

当出现“--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> / bin / bash:show:未找到命令

你得到这个的事实让我想知道你是否真的能够做“显示版本”,即使是像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))。它还显示未加密的SSH数据包,从密钥交换到通道开放等。这可能不是你想要的。

至于$ansi->getScreen() ......如果您不喜欢输出中的ANSI代码,那可能会有效。你确实有一些。例如。 [xxxxxxxxxx[xxx@[34;1mPRA-xxxxxxxx[xxxx> - @[34;1m位是ANSI。

也许值得它与$ansi->getHistory()玩。

© www.soinside.com 2019 - 2024. All rights reserved.