phpseclib ssh2 pty telnet cisco — как продвигаться — больше — в & quot; показать версию & quot;

У меня проблемы с этой командой «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());

}

Последний вход в систему: ср 4 окт. 15:41:46 2017 от xx.xx.xxx.xxx

Ограниченный доступ для авторизованных пользователей.
[xxxxxxxxxx [xxx @ [34; 1mPRA-xxxxxxxx [xxxx> [xxx]

Аутентифицировано успешно!

«НЕ ЗАБУДЬТЕ СОХРАНИТЬ КОНФИГУРАЦИЮ МАРШРУТИЗАТОРА НА NVRAM, ПОСЛЕ ТОГО, КАК ОБЪЕДИНЯТЬ ИЗМЕНЕНИЯ !!»

xxxxx_xxxx_xx> показать версию
bash: show: команда не найдена
[xxxxxxxxxx [xxx @ [34; 1mPRA-xxxxxxxx [xxxx> [xxx]

с $ssh->exec("show version");

Последний вход в систему: ср 4 окт. 15:41:46 2017 от 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();

благодарю вас

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: команда не найдена

Тот факт, что вы получаете это, заставляет меня задуматься, можете ли вы на самом деле делать «показ версии» даже с SSH-клиентом, таким как PuTTY или 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[xxx@[34;1mPRA-xxxxxxxx[xxxx> — тот @[34;1m немного ANSI.

Может также стоить того, чтобы поиграть с $ansi->getHistory(),

0

Другие решения

Других решений пока нет …