Многоуровневые соединения SSH с использованием Java

1

Я пытаюсь запустить набор сценариев на удаленной машине (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. Установите соединение ssh с машиной за другим сервером.
  2. Запустите скрипт на этом сервере
  3. Выполните вывод этого сценария обратно в мой gui.

Совет по №1 будет оценен по достоинству.

Я несколько дней мучился этим. Там пара подобных потоков, но никто, кажется, не отвечает на мой вопрос. Не стесняйтесь присылать мне ссылки, но если это на первых 5 страницах Google; Скорее всего, я это видел.

Теги:
ssh
swing

1 ответ

1
Лучший ответ

После многих часов расследования я, наконец, наткнулся на следующее:

Как использовать jsch с ProxyCommands для переноса портов

Я не знаю, чего-то не хватает, но я нашел по меньшей мере 50 тем об этой проблеме, которые не имеют полноценного решения.

Я думаю, что мораль этой истории прочитана всеми примерами, прежде чем вы начнете.

Прямое решение: http://www.jcraft.com/jsch/examples/JumpHosts.java.html

Теперь найдите способ сделать это в Windows. Предпочтительно без принуждения пользователя к установке клиента ssh.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню