問題:使用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