Porta SSH à frente com SSHj

Eu estou tentando criar um túnel para usar um serviço por trás de um firewall, que suporta SSH. Eu queria uma solução completa em java, mas não consigo fazê-lo funcionar. Eu achei istogithub snip e com base nisso eu criei o seguinte código para manter um thread em segundo plano me dando o túnel:

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

O problema é que, se eu me conectar a um servidor SSH remoto como '10.0.3.96 ', ele não funciona. Se eu usar o servidor SSH local no meu localhost, ele funcionará. Eu tenho passado por diferentes configurações com alguma sorte e tentei depurar, mas não consigo entender o que está acontecendo dentro do pacote SSHj.

Agora não precisa ser uma solução SSHj, mas isso seria preferível, já que outras partes do código são totalmente implementadas e usam SSHj e eu não quero misturar dois pacotes SSH em um projeto.

Obrigado por qualquer ajuda.

questionAnswers(1)

yourAnswerToTheQuestion