2017-01-10 212 views
0

我可以使用指定的憑據成功連接到WinSCP到SFTP服務器。但是,使用Apache VFS從Java做的時候,我得到錯誤:與apache vfs的SFTP連接失敗,但使用WinSCP成功

Caused by: org.apache.commons.vfs2.FileSystemException: Could not connect to SFTP server at "sftp://username:***@server_addres/". 
at org.apache.commons.vfs2.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:170) 
at org.apache.commons.vfs2.provider.sftp.SftpFileProvider.doCreateFileSystem(SftpFileProvider.java:97) 
... 22 more 
Caused by: com.jcraft.jsch.JSchException: Auth fail 
at com.jcraft.jsch.Session.connect(Session.java:512) 
at com.jcraft.jsch.Session.connect(Session.java:183) 
at org.apache.commons.vfs2.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:166) 

我已經檢查證書,他們是那些完全一樣,當我嘗試使用WinSCP賦予連接。 WinSCP可以連接成功,但我的Java代碼獲得上述錯誤(Auth失敗)。
有沒有人有一些線索可能是什麼問題?
我連接的計算機的公有IP範圍已作爲另一方的可信IP添加到防火牆例外中。
請大家幫忙,任何想法都非常感謝。

親切的問候,
misamas

+0


所以將溶液將其傳遞給manager.resolveFile()方法是這樣的(以與它的十六進制代碼%25來代替密碼的%符號在URI)之前做UriParser.encode(sftpUri)您可以檢查ssdh服務器的日誌文件並查看它抱怨的內容。也許它確實需要另一種身份驗證方法或嘗試首先建立一些tty或其他設置。 – eckes

回答

1

的問題是在密碼。它包含%符號,這是在URI中傳遞時的特殊字符(如傳遞%word)。

import org.apache.commons.vfs2.provider.UriParser; 
... 
String sftpUri = String.format("sftp://%s:%[email protected]%s/%s/%s", configData.getUserId(), configData.getPassword(), configData.getServerAddress(), 
       configData.getRemoteDirectory(), configData.getFileName()); 
String sftpUriEncoded = UriParser.encode(sftpUri); 
FileObject remoteFile = manager.resolveFile(sftpUriEncoded, options); 
相關問題