问题:使用JSCH库通过SFTP连接远程站点会导致“通道未打开”。代码从一个互联网连接正常工作,但从另一个失败。另一个是通过代理完成的。不过,我可以使用FileZilla客户端通过另一台SFTP进行连接。JSCH通道未打开(新)
研究:试图增加连接timout和设置useDNS:假从类似的问题。我有会议和频道选择它。但是,在timout之后,通道连接失败。
问题:如何获得连接。
下面是代码和错误堆栈跟踪提取物:
JSch jsch = new JSch();
UserInfo userInfo ;
jsch.setKnownHosts(KNOWN_HOSTS);
session = jsch.getSession(
Menue.SITE_LOGIN,
Menue.SITE_HOST,
Menue.SITE_PORT);
session.setPassword(
Menue.SITE_PASSWORD);
if (Menue.USE_PROXY) {
session.setProxy(
new ProxyHTTP(
Menue.PROXY_HOST,
Menue.PROXY_PORT));
}
session.setConfig(
"StrictHostKeyChecking",
"yes");
session.connect();
channel = session.openChannel("sftp");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect(60 * 1000); // Error: channel is not opened.
堆栈跟踪:
com.jcraft.jsch.JSchException:信道没有被打开。在 com.jcraft.jsch.Channel.sendChannelOpen(Channel.java:765)在 com.jcraft.jsch.Channel.connect(Channel.java:151)
[Channel.java 765线(HTTP:/ /grepcode.com/file/repo1.maven.org/mav en2/com.jcraft/jsch/0.1.51/com/jcraft/jsch/Channel.java?av = f#765)意味着它失败了,因为你的5秒超时太短。对此的修复似乎很明显。你说你已经尝试了增加超时时间,并以其他方式失败。但是我们只能帮助你解决你在问题中出现的问题。 – Kenster
更改为60秒。结果相同。它工作正常,没有任何超时从另一个办公室。 – Zon
您可以在60秒内调查服务器上正在发生的事情吗?例如,如果服务器是OpenSSH,它应该启动[sftp-server](http://man.openbsd.org/sftp-server)程序的一个实例来处理sftp通道请求。另外,ssh服务器可以设置为以不同的方式处理特定的连接。或者用户的.bashrc或服务器上的类似文件可能会干扰启动sftp-server程序。 – Kenster