如何在java中的本地端口上通过socks代理创建ssh连接

时间:2014-10-16 11:30:40

标签: ssh proxy socks

我有一个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);
        }
    }

1 个答案:

答案 0 :(得分:1)

ProxySOCKS5类实现了一个SOCKS 客户端,Jsch可以使用它来建立原始的SSH连接。

要提供相当于ssh的-D选项,您需要一个SOCKS 服务器,它为每个客户端打开一个ChannelDirectTCPIP频道。 Jsch没有提供这样的东西,所以你可能需要write your own