Реализация прыжковых хостов с SSHJ - PullRequest
0 голосов
/ 05 мая 2019

Кто-то попросил об этом , и есть pull-запрос , который содержит код, который каким-то образом был переписан до слияния, и кому-то удалось кодировать решение, основанное на выдвижная запрос . Однако в этой библиотеке нет примера окончательной версии.

Следовательно, это не очень помогает мне с моим ограниченным пониманием ssh и всего. В основном, я хочу решить два сценария:

  1. обычный SSH-сеанс через несколько хостов перехода:

    • user1@jump1.com
    • user2@jump2.com
    • user3@jump3.com
    • admin@server.com

    заканчивается в ssh-сеансе, где подключающийся пользователь может свободно работать в этой ssh-оболочке на server.com, то есть, что бы обычная ssh admin@server.com -команда выполняла в оболочке на jump3.com.

  2. как и выше, но заканчивается переадресацией порта на server.com:80

Это возможно с ssh ProxyCommand, но я хочу закодировать это с помощью SSHJ. И вот где я не могу понять, как это сделать.

Что у меня сейчас есть

SSHClient hop1 = new SSHClient();
try {
  Path knownHosts = rootConfig.getKnownHosts();
  if (knownHosts != null) {
    hop1.loadKnownHosts(knownHosts.toFile());
  } else {
    hop1.loadKnownHosts();
  }

  Path authenticationFile = hop1Config.getAuthenticationFile();
  if (authenticationFile != null) {
    KeyProvider keyProvider = hop1.loadKeys(authenticationFile.toString(), (String) null);
    hop1.authPublickey(hop1Config.getUser(), keyProvider);
  } else {
    hop1.authPassword(hop1Config.getUser(), hop1Config.getPassword());
  }

  // I found these methods:
  hop1.getConnection();
  hop1.getSocket();

  // and now what?
} catch (IOException e) {
  logger.error("Failed to open ssh-connection to {}", hop1Config, e);
}

Я заметил класс LocalPortForwarder.DirectTCPIPChannel, но я не знаю, с какими значениями мне следует его создавать или как потом использовать его с остальными.

...