使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理

Posted

技术标签:

【中文标题】使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理【英文标题】:Using JSch to create a SOCKS proxy tunneled through SSH 【发布时间】:2018-03-23 18:59:58 【问题描述】:

据我所知,可以使用 JSch 创建一个 SSH 隧道,然后将设置放在 Firefox 中作为 SOCKS5 代理,所有流量都将通过 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】:

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

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

【讨论】:

以上是关于使用 JSch 创建一个通过 SSH 隧道化的 SOCKS 代理的主要内容,如果未能解决你的问题,请参考以下文章

通过 JSch 建立 SSH 隧道

基于 JSCH (SSH) 和 HTTPS 的反向隧道

使用 JSCH Java 反向 SSH 隧道 [关闭]

android 使用jsch 开启ssh隧道 ssh tunnel

在JSch中不断收到Auth失败异常,但我能够在没有密码的情况下ssh到IP [重复]

JSch 多个隧道/跳转主机