У меня проблемы с этой командой «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();
благодарю вас
Мне нужно перейти к следующему экрану, нажав клавишу, когда появится «—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()
,
Других решений пока нет …