Я пытаюсь создать туннель для использования службы за брандмауэром, который поддерживает SSH. Я хотел получить полное решение в java, но я не могу заставить его работать. Я нашел этот github snip и основано на том, что я создал следующий код, чтобы фоновый поток дает мне туннель:SSH-порт с SSHj
// property on surrounding class
// static final SSHClient sshclient = new SSHClient();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
String host = "10.0.3.96";
sshclient.useCompression();
sshclient.addHostKeyVerifier("30:68:2a:20:21:9f:c8:e8:ac:b4:a7:fc:2d:a7:d0:26");
sshclient.connect(host);
sshclient.authPassword("messy", "messy");
if (!sshclient.isAuthenticated()) {
throw new RuntimeException(String.format("Unable to authenticate against '%s'", host));
}
Forward forward = new Forward(8111);
InetSocketAddress addr = new InetSocketAddress("google.com", 80);
SocketForwardingConnectListener listener = new SocketForwardingConnectListener(addr);
sshclient.getRemotePortForwarder().bind(forward, listener);
sshclient.getTransport().setHeartbeatInterval(30);
HttpURLConnection con = (HttpURLConnection) new URL("http://localhost:8111").openConnection();
con.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line = null;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
sshclient.getTransport().join();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (sshclient != null && sshclient.isConnected()) {
sshclient.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.setDaemon(true);
thread.start();
Проблема заключается в том, что если я подключиться к удаленному серверу SSH, как '10 .0.3.96' это делает не работа. Если я использую локальный SSH-сервер на моем локальном хосте, он будет работать. Я пробовал разные конфигурации с любой удачей и пытался отлаживать, но я не могу понять, что происходит внутри пакета SSHj.
Теперь это не должно быть решением SSHj, но это было бы предпочтительнее, так как другие части кода полностью реализованы и с использованием SSHj, и я не хочу смешивать два пакета SSH в одном проекте.
Спасибо за любую помощь.
Определить, что «не работает». Что происходит вместо этого? – EJP
Когда он не работает, HttpConnection, с которым я тестирую, выдает исключение, в котором говорится, что Connection отказано. Когда он работает, я печатаю, что google.com обслуживает содержимое. – CodeReaper