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)循环中来保持运行命令。
答
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);所以你应该给本地主机
似乎这个库是有缺陷的。我更新了上面的问题。 – Dean 2014-09-26 13:49:21