有人提出这个要求,并且有一个拉取请求,其中包含在合并之前以某种方式被重写的代码,并且有人设法根据拉取请求编写了一个解决方案。但是,该库中没有最终版本的示例。
因此,这并不能真正帮助我了解我对 ssh 的有限理解。基本上有两种情况我想解决:
通过一些跳转主机的常见 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 中会做什么。与上面类似,但以转发到 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
,但我不知道我应该用什么值来实例化它,或者之后如何将它与其余部分一起使用。