我有一个socks代理,可以通过这个命令在本地端口的Ubuntu终端上创建ssh连接:
ssh -D local_port user_name @ host_IP
但我希望通过Java代码执行此任务。我使用下面的代码,但任何时候运行它,显示此异常:
“com.jcraft.jsch.JSchException:ProxySOCKS5:com.jcraft.jsch.JSchException:java.net.ConnectException:Connection refused”
public static void main(String[] arg) {
try {
JSch jsch = new JSch();
String user = "user_name";
String host = "host_IP";
int port = local_port;
Session session = jsch.getSession(user, host, 22);
Proxy proxy = new ProxySOCKS5(host, port);
session.setProxy(proxy);
String passwd = "password";
session.setPassword(passwd);
UserInfo ui = new MyUserInfo()
session.setUserInfo(ui);
session.connect(30000);
Channel channel = session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect(3 * 1000);
} catch (Exception e) {
System.out.println(e);
}
}
答案 0 :(得分:1)
ProxySOCKS5
类实现了一个SOCKS 客户端,Jsch可以使用它来建立原始的SSH连接。
要提供相当于ssh的-D
选项,您需要一个SOCKS 服务器,它为每个客户端打开一个ChannelDirectTCPIP频道。 Jsch没有提供这样的东西,所以你可能需要write your own。