2013-04-08 8 views
1

Я пытаюсь реализовать пользовательский интерфейс онлайн-терминала с jsch в качестве бэкэнд. Мне нужно отобразить userinfo, т.е. [имя_пользователя @ Machine ~] $ информации в пользовательском интерфейсе. Поскольку выходной поток просто посылает байты, трудно отличить userinfo от реального выхода команды. Есть ли способ отличить одно и то же?Извлечь userInfo из потока АОH

ответ

1

В общем, нет.

Если у вас есть канал оболочки, все, что вы видите, это выход из удаленной оболочки пользователя, включая приглашение и фактический вывод команды. Вы можете попытаться разобрать это. В простых случаях это будет работать, но в целом это невозможно, так как каждая команда может выводить строку типа, подобную подсказке.

Имя пользователя должно быть вам известно (оно должно быть таким же, как вы использовали для входа в систему), имя сервера немного сложнее.

Идея, заслуживающая изучения, может заключаться в том, чтобы установить специальную подсказку, ограниченную символьными последовательностями, которые вряд ли произойдут в «нормальном» командном выводе - установите переменную PROMPT в вашей оболочке.

Вы можете обойти эту проблему, не используя фактически shell канала, но индивидуальный exec канала для каждой команды - но тогда вы должны будете интерпретировать команды, как cd себя и следить за текущую директорию, и добавьте cd перед действительной командой в каждом канале exec. Возможно, вы захотите открыть канал sftp параллельно, чтобы отслеживать каталоги (и файлы списков и т. Д.).

Смежные вопросы