使用SSHJ实现跳转主机

时间:2019-05-05 16:26:52

标签: shell portforwarding sshj

有人asked for this,还有一个pull-request,其中包含在合并之前以某种方式重写的代码,有人设法code a solution based on the pull-request。但是,该库中没有最终版本的示例。

因此,我对ssh及其全部的有限了解并不能真正帮助我。我基本上要解决两种情况:

  1. 通过某些跳转主机的常见SSH会话:

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

    在ssh会话中结束,在此ssh会话中,连接的用户可以在server.com的ssh-shell中自由工作,即,正常的ssh admin@server.com命令将在jump3.com的shell中执行的操作。 / p>

  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,但是我不知道应该实例化哪个值,或者以后如何将其与其余值一起使用。

0 个答案:

没有答案