为了账号安全,请及时绑定邮箱和手机立即绑定

通过 Jsch 端口转发的 Java 套接字连接

通过 Jsch 端口转发的 Java 套接字连接

撒科打诨 2022-12-28 11:05:45
我正在尝试通过本地端口转发建立套接字连接。流程是:客户端 --> SSHhost --> TargetHost试图通过端口转发来实现这一点,但不断收到 IllegalStateException: Can't connect to rHost 错误。我测试过远程主机确实直接接受连接,我的用例是通过 SSHhost 连接。不确定哪里出了问题,或者我愿意接受不同的方法或建议?谢谢。 try {        jsch.addIdentity(privateKeyPath);        session = jsch.getSession(username, hostL, port);        session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");        java.util.Properties config = new java.util.Properties();        session.setConfig(config);    } catch (JSchException e) {        throw new RuntimeException("Failed to create Jsch Session object.", e);    }    try {        session.connect();        session.setPortForwardingL(8080, rHost, rPort);        try (Socket s = new Socket()) {            s.connect(new InetSocketAddress(rHost, 8080), timeout);        } catch (Exception e) {            String errText = String.format("Can't connect to rHost")            throw new IllegalStateException(errText);        }        session.disconnect();    } catch (JSchException e) {        throw new RuntimeException("Error durring session connection );    }
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您需要更改以下行


s.connect(new InetSocketAddress(rHost, 8080), timeout);



s.connect(new InetSocketAddress("localhost", 8080), timeout);


因为你在使用该方法时实际上已经将本地主机端口 8080 映射到远程主机端口session.setPortForwardingL(8080, rHost, rPort);


你可以试试这段代码


try {


            jsch.addIdentity(privateKeyPath);

            session = jsch.getSession(username, hostL, port);

            session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");


            session.setConfig("StrictHostKeyChecking", "no");




            session.connect();


            session.setPortForwardingL(8080, rHost, rPort);

            Socket s = new Socket();

            s.connect(new InetSocketAddress("localhost", 8080), timeout);



            session.disconnect();

        } catch (JSchException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号