我已经设置了一个 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:监听端口 19999 的远程端口转发失败。
如果我从命令行运行该命令,它就会起作用。所以我认为 Jsch 库有缺陷
ssh -R 19999:localhost:22 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0d6e686379627e4d3c343f233c3b35233d2335" rel="noreferrer noopener nofollow">[email protected]</a>
最佳答案
com.jcraft.jsch.JSchException: remote port forwarding failed for listen port 19999
...
If I run the command from the command line, it works
最简单的解释是,当您的 jsch session 请求端口转发时,远程服务器由于某种原因无法绑定(bind)到端口 19999。可能是因为其他一些进程绑定(bind)到该端口。可能是因为您的交互式命令之一仍在运行并绑定(bind)到该端口。
您可以在远程服务器上运行 netstat
以查看其他进程是否已在使用端口 19999。
关于java - com.jcraft.jsch.JSchException : remote port forwarding failed for listen port 19999,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26027206/