com.jcraft.jsch.JSchException:远程端口转发失败的监听端口19999

问题描述:

我已经安装Java Web应用程序,执行该代码为反向SSHcom.jcraft.jsch.JSchException:远程端口转发失败的监听端口19999

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 [email protected] 

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

+0

似乎这个库是有缺陷的。我更新了上面的问题。 – Dean 2014-09-26 13:49:21

com.jcraft.jsch.JSchException: remote port forwarding failed for listen port 19999
...
If I run the command from the command line, it works

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

你可以,如果一些其他进程已在使用端口19999

更改代码

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

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

的方法是会话的远程服务器上运行netstat看到的。 setPortForwardingR(rport,lhost,lport);所以你应该给本地主机