【问题标题】:com.jcraft.jsch.JSchException: remote port forwarding failed for listen port 19999com.jcraft.jsch.JSchException:监听端口 19999 的远程端口转发失败
【发布时间】:2014-11-19 13:19:18
【问题描述】:

我已经设置了一个 java web 应用程序来执行此代码以用于反向 ssh

 FileInputStream hostFile = new FileInputStream(""+filePath);
 JSch jsch=new JSch();
 java.util.Properties config = new java.util.Properties(); 
 config.put("StrictHostKeyChecking", "no");
 jsch.setKnownHosts(hostFile);
 Session session=jsch.getSession("centos", "192.168.0.8", 22); //THIS WORKS
 session.setConfig(config);
 session.setPassword(password);
 session.connect();
 session.setPortForwardingR(19999,"192.168.0.8",22); //FAILS HERE!!

但是最后一行失败并抛出错误:com.jcraft.jsch.JSchException: remote port forwarding failed for listen port 19999。

如果我从命令行运行命令,它就可以工作。所以我认为 Jsch 库有缺陷

 ssh -R 19999:localhost:22 centos@192.168.0.8

【问题讨论】:

    标签: java spring ssh jsch openssh


    【解决方案1】:

    修改代码

    session.setPortForwardingR(19999,"192.168.0.8",22);  
    

    session.setPortForwardingR(19999,"localhost",22);
    

    方法是 session.setPortForwardingR(rport, lhost, lport);所以你应该给 localhost

    【讨论】:

      【解决方案2】:

      com.jcraft.jsch.JSchException:监听端口 19999 的远程端口转发失败
      ...
      如果我从命令行运行命令,它可以工作

      最简单的解释是,当您的 jsch 会话请求端口转发时,远程服务器由于某种原因无法绑定到端口 19999。可能是因为其他一些进程绑定到该端口。可能是因为您的交互式命令之一仍在运行并绑定到该端口。

      您可以在远程服务器上运行netstat 以查看是否有其他进程已在使用端口 19999。

      【讨论】:

        【解决方案3】:

        我相信您需要通过将代码置于 while (true) 循环中来继续运行命令。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-04-25
          • 2021-01-27
          • 2014-07-09
          • 2017-04-19
          • 2021-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多