2013-09-23 3 views
0

Я хочу управлять удаленной системой на Java через SSH с использованием АОH. Передняя часть представляет собой простой графический интерфейс пользователя, который запускает выполнение команды. Некоторые элементы управления являются критическими по времени, не должно быть большой задержки между нажатием кнопки и исполнением команды.Поддержание SSH-канала в Java с помощью АОH

Моя проблема: Каждый раз, когда открывается новый канал, для завершения инициализации требуется около 8 секунд, пока команда не будет выполнена. (Внутренний интерфейс реализован с помощью RBSH afaik)

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

Мой вопрос: Есть ли способ инициализировать канал для выполнения некоторых команд и прочитать вывод (и только выход команды) последовательно?

Я уже понял, что session.openChannel("shell") может дать желаемую функциональность, но я не могу понять, как это сделать должным образом.

EDIT: Я не привязан к АОH. Если есть другая библиотека, которая может это сделать, я также открыт для этого

+0

Возможный дубликат [любые хорошие примеры jsch?] (Http://stackoverflow.com/questions/2405885/any-good-jsch-examples) –

ответ

1

Вы хотите канал «exec», а не канал «shell». SCP использует канал exec, поэтому просмотрите one of the SCP examples или one of the SCP libraries в Интернете.

Альтернативно, если вы управляете удаленным сервером, вы можете определить «подсистему» ​​для команды, которую вы хотите запустить, и запустить ее через канал подсистемы. Большая разница между каналом exec и подсистемой - это кто задает команду, которая будет выполнена. Канал exec будет выполнять команду, предоставляемую клиентом. При подсистеме клиент просто запрашивает подсистему по имени, а сервер выполняет правильную команду (или предоставляет услугу каким-либо другим способом). SFTP использует подсистему под названием «sftp-server», поэтому вы можете посмотреть, как реализованы классы SFTP класса Jsch.

+0

Если я получу это правильно, оба примера exec, включая закрытие канала после выполнение команды. В этом случае я должен избегать, так как каждое открытие канала занимает 8 секунд. Для идеи подсистемы: у меня нет контроля над удаленной реализацией ssh, это закрытая система. – dnbjunkie

+0

Проходит ли 8 секунд _just_, чтобы открыть канал, или вы также открываете новый сеанс каждый раз? Если для открытия любого канала требуется 8 секунд, возможно, вам стоит сосредоточиться на его исправлении. Если вы застряли в этом 8-секундном поведении, тогда есть способы открыть канал один раз, а затем запустить последовательность команд, не закрывая его. – Kenster

+0

Посмотрите на этот [пример класс] (http://pastebin.com/F50640fV). Результатом вызова является http://pastebin.com/u5kAccaD – dnbjunkie

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