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

我正在尝试通过本地端口转发建立套接字连接。流程是:
客户端 --> 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 );
    }
muasif80

您需要更改以下行

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

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

因为你在使用这个方法的时候,实际上已经把你的localhost端口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();
        }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Java 中使用 JSch 转发端口时“本地端口......无法绑定”

来自分类Dev

如何通过检查套接字来验证端口转发已建立?

来自分类Dev

无法通过SSH连接到转发端口

来自分类Dev

通过RS-232端口转发互联网连接

来自分类Dev

试图创建一个带有公共 IP 的套接字,没有端口转发的 java?

来自分类Dev

通过SSH转发抽象的unix套接字?

来自分类Dev

端口转发和Python套接字

来自分类Dev

如何通过套接字连接将浮点数从Java发送到C ++?

来自分类Dev

端口转发openvpn连接

来自分类Dev

通过hostapd转发端口?

来自分类Dev

Java NIO套接字,是否连接到任何可用端口?

来自分类Dev

与Qt的Java套接字连接

来自分类Dev

Android Java:通过套接字接收图像

来自分类Dev

通过Java中的套接字发送对象

来自分类Dev

通过套接字发送可执行Java

来自分类Dev

通过套接字Java下载图像

来自分类Dev

通过套接字的Java TCP通信

来自分类Dev

通过Java中的套接字发送链表

来自分类Dev

通过Java套接字发送对象

来自分类Dev

通过Java套接字返回多个值

来自分类Dev

java:通过套接字发送方法

来自分类Dev

通过套接字发送可执行Java

来自分类Dev

通过代理建立套接字连接

来自分类Dev

通过sshfs连接到远程套接字

来自分类Dev

通过代理的C ++套接字连接

来自分类Dev

通过套接字连接发送多个请求

来自分类Dev

通过动态端口转发通过代理ssh

来自分类Dev

无需端口转发即可通过SSH连接到Raspberry Pi

来自分类Dev

我是否需要端口转发才能通过WAN连接2人游戏