Я пытаюсь запустить набор сценариев на удаленной машине (linux) с помощью графического интерфейса swing на локальном компьютере (linux) и прочитать выходные данные команд (как они работают) обратно в текстовую область.
Машины, с которыми я пытаюсь подключиться, находятся за моим брандмауэром в школах, поэтому я должен подключиться к этому, прежде чем я смогу подключиться к ним.
Типичным синтаксисом bash было бы что-то вроде: "ssh -t user1 @host1 ssh -t user2 @host2" Сначала я попытался использовать runtime(), чтобы непосредственно вызвать вышеприведенную команду, но это, похоже, не работает вообще, Или, может быть, я что-то упустил. Я не получаю выход из следующей программы.
Process dirReader = Runtime.getRuntime().exec("ssh -t user1@host1 ssh -t user2@host2");
InputStream stdout = dirReader.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
String line = reader.readLine();
while(line != null){
fileNames.add(line);
line = reader.readLine();
}
reader.close();reader=null;
stdout.close();stdout=null;
dirReader.destroy();dirReader=null;
} catch(IOException e){
System.out.println("Exception: Error reading models directory");
System.exit(1);
}
Когда я запускаю выше с чем-то простым, как "ls", я получаю ожидаемые результаты. Я подозреваю, что с помощью ssh требуется какое-то "специальное" лечение, поэтому я провел последние несколько дней с библиотеками сторонних разработчиков. JSch и ganymed.
Одноуровневые соединения достаточно просты, но я боюсь, что я немного тупик на мульти. Вы думаете, что будет простое решение, но я этого не вижу. Несколько человек предложили туннелирование, но мне тоже не повезло.
Я вижу, что в jSch есть способ открыть канал напрямую, чтобы "эмулировать" консоль. Это сработает, но, похоже, это излишнее то, что я хочу делать. Кроме того, консоль, появившаяся за моим графическим интерфейсом, нежелательна.
Поэтому, чтобы повторить, я хочу:
Совет по №1 будет оценен по достоинству.
Я несколько дней мучился этим. Там пара подобных потоков, но никто, кажется, не отвечает на мой вопрос. Не стесняйтесь присылать мне ссылки, но если это на первых 5 страницах Google; Скорее всего, я это видел.
После многих часов расследования я, наконец, наткнулся на следующее:
Как использовать jsch с ProxyCommands для переноса портов
Я не знаю, чего-то не хватает, но я нашел по меньшей мере 50 тем об этой проблеме, которые не имеют полноценного решения.
Я думаю, что мораль этой истории прочитана всеми примерами, прежде чем вы начнете.
Прямое решение: http://www.jcraft.com/jsch/examples/JumpHosts.java.html
Теперь найдите способ сделать это в Windows. Предпочтительно без принуждения пользователя к установке клиента ssh.