Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jsch: HTTPS over tunnel

Tags:

ssh

https

jsch

I can establish a port forwarding session in Ubuntu as follows:

ssh -L 8000:dev.mycompany.com:443 jump.mycompany.com

now I'd like to emulate this with Jsch:

    public static void openTunnel() {
    JSch jsch = new JSch();
    String privateKey = "~/.ssh/id_rsa";
    try {
        jsch.addIdentity(privateKey);
        log.info("Connecting to {}@{}", getJumpUser(), getJumpServer());
        Session session = jsch.getSession(getJumpUser(), getJumpServer(), 22);
        session.connect();
        session.setPortForwardingL(8000, getHost(), 433);
    } catch (JSchException e) {
        log.error("", e);
    }
}

However I get the following exception after the tunnel is set up, and trying to connect to it with RestTemplate (Spring HTTP Client - but curl gives an error as well):

ssl.SSLHandshakeException: Remote host closed connection during handshake
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:744)

What do I have to confiugre in Jsch so that it does exactly the same as the openssh client?

like image 335
Balázs Németh Avatar asked Aug 23 '26 21:08

Balázs Németh


1 Answers

I suppose, you're trying to get a connection to a https webserver that's not public available.

The port forwarding works, BUT https will not work on localhost:8000, because the certificate is for dev.mycompany.com and not localhost.

You can cheat, by adding an entry into your hosts file.

127.0.0.1 dev.mycompany.com

But probably it's easier to try socks5.

ssh jump.mycompany.com -D 8005

And then setting in your browser (sample for firefox):

Select: Manual proxy configuration:
Socks Host: localhost
Port: 8005
Socks5

like image 101
jeb Avatar answered Aug 26 '26 14:08

jeb