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

问题描述 投票:0回答:1

据我所知,可以使用 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 在其上设置隧道时所做的那样。

java ssh jsch socks ssh-tunnel
1个回答
1
投票

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

对于普通的 SSH 隧道/端口转发,您必须指定目标地址,以将隧道的另一端连接到 (

tunnelRemoteHost
)。这在 PuTTY“动态”模式下显然是不必要的,因为有一个代理协议 (SOCKS) 负责处理这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.