使用JSch创建通过SSH隧道传输的SOCKS代理

时间:2017-10-12 00:15:38

标签: java ssh jsch socks ssh-tunnel

就我读取而言,可以使用JSch创建SSH隧道,然后将设置作为SOCKS5代理放入Firefox中,并且所有流量都将通过JSch连接的机器。我找到了以下代码,但有一些我不了解它。

String host = "my ssh server ip";
String user = "root";
String password = "mypass";
int port = 22;

int tunnelLocalPort = 9080;
String tunnelRemoteHost = "YYY.YYY.YYY.YYY";
int tunnelRemotePort = 80;

JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
localUserInfo lui = new localUserInfo();
session.setUserInfo(lui);
session.connect();
session.setPortForwardingL(tunnelLocalPort, tunnelRemoteHost, tunnelRemotePort);
System.out.println("Connected");

tunnelLocalPort将是我的java程序正在监听的端口?这是我把Firefox SOCKS5代理设置的端口吗?

我不明白tunnelRemoteHost的用途,我希望它像SOCKS5代理一样,就像PuTTY在设置隧道时一样。

1 个答案:

答案 0 :(得分:1)

JSch确实允许创建SSH隧道。但是PuTTY的“动态”端口转发功能(我认为,你指的是)不仅仅是一个SSH隧道。它特别实现了SOCKS代理(你所追求的)。这是JSch没有实现的东西。

对于普通的SSH隧道/端口转发,您必须指定目标地址,以将隧道的另一端连接到(tunnelRemoteHost)。这在PuTTY“动态”模式中显然不是必需的,因为代理协议(SOCKS)就是这样的。