0

有人提出这个要求,并且有一个拉取请求,其中包含在合并之前以某种方式被重写的代码,并且有人设法根据拉取请求编写了一个解决方案。但是,该库中没有最终版本的示例。

因此,这并不能真正帮助我了解我对 ssh 的有限理解。基本上有两种情况我想解决:

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

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

    以 ssh-session 结束,连接的用户可以在 server.com 的 ssh-shell 中自由工作,即普通ssh admin@server.com-command 在 jump3.com 的 shell 中会做什么。

  2. 与上面类似,但以转发到 server.com:80 的端口结束

ssh's 可以做到这一点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);
}

我注意到 class LocalPortForwarder.DirectTCPIPChannel,但我不知道我应该用什么值来实例化它,或者之后如何将它与其余部分一起使用。

4

0 回答 0