我正在尝试通过本地端口转发建立套接字连接。流程是:
客户端 --> SSHhost --> TargetHost
试图通过端口转发来实现,但不断收到IllegalStateException: Can't connect to rHost错误。
我测试了远程主机确实直接接受连接,我的用例是通过 SSHhost 连接。
不知道哪里出了问题,或者我愿意接受不同的方法或建议?谢谢。
try {
jsch.addIdentity(privateKeyPath);
session = jsch.getSession(username, hostL, port);
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
java.util.Properties config = new java.util.Properties();
session.setConfig(config);
} catch (JSchException e) {
throw new RuntimeException("Failed to create Jsch Session object.", e);
}
try {
session.connect();
session.setPortForwardingL(8080, rHost, rPort);
try (Socket s = new Socket()) {
s.connect(new InetSocketAddress(rHost, 8080), timeout);
} catch (Exception e) {
String errText = String.format("Can't connect to rHost")
throw new IllegalStateException(errText);
}
session.disconnect();
} catch (JSchException e) {
throw new RuntimeException("Error durring session connection );
}
您需要更改以下行
s.connect(new InetSocketAddress(rHost, 8080), timeout);
至
s.connect(new InetSocketAddress("localhost", 8080), timeout);
因为你在使用这个方法的时候,实际上已经把你的localhost端口8080映射到了远程主机端口 session.setPortForwardingL(8080, rHost, rPort);
你可以试试这个代码
try {
jsch.addIdentity(privateKeyPath);
session = jsch.getSession(username, hostL, port);
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
session.setPortForwardingL(8080, rHost, rPort);
Socket s = new Socket();
s.connect(new InetSocketAddress("localhost", 8080), timeout);
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句