有人asked for this,还有一个pull-request,其中包含在合并之前以某种方式重写的代码,有人设法code a solution based on the pull-request。但是,该库中没有最终版本的示例。
因此,我对ssh及其全部的有限了解并不能真正帮助我。我基本上要解决两种情况:
通过某些跳转主机的常见SSH会话:
在ssh会话中结束,在此ssh会话中,连接的用户可以在server.com的ssh-shell中自由工作,即,正常的ssh admin@server.com
命令将在jump3.com的shell中执行的操作。 / p>
与上述类似,但最后将端口转发到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
,但是我不知道应该实例化哪个值,或者以后如何将其与其余值一起使用。