SSH-Port, der mit SSHj weitergeleitet wird

Ich versuche, einen Tunnel zu erstellen, um einen Dienst hinter einer Firewall zu verwenden, der SSH unterstützt. Ich wollte eine vollständige Lösung in Java, aber ich kann nicht scheinen, es zum Funktionieren zu bringen. ich habe das gefundenGithub Snip und basierend darauf habe ich den folgenden Code erstellt, um einen Hintergrund-Thread zu führen, der mir den Tunnel gibt:

// 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();

Das Problem ist, dass wenn ich mich mit einem entfernten SSH-Server wie '10 .0.3.96 'verbinde, es nicht funktioniert. Wenn ich den lokalen SSH-Server auf meinem localhost verwende, funktioniert dies. Ich habe mit etwas Glück verschiedene Konfigurationen durchlaufen und versucht, Fehler zu beheben, aber ich kann nicht verstehen, was im SSHj-Paket vor sich geht.

Jetzt muss es keine SSHj-Lösung sein, aber das wäre vorzuziehen, da andere Teile des Codes vollständig implementiert sind und SSHj verwenden und ich nicht zwei SSH-Pakete in einem Projekt mischen möchte.

Danke für jede Hilfe.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage