2017-01-10 32 views
0

SFTPサーバーに、指定した資格情報を使用してWinSCPに正常に接続できます。しかし、私はエラーを取得する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コードは上記のエラーを受け取ります(認証失敗)。
誰かが問題になるかもしれない何か手掛かりを持っていますか?
接続元のマシンのパブリックIP範囲が、ファイアウォールの例外に、もう一方の信頼できるIPとして追加されました。
助けてください、任意のアイデアは非常に感謝しています。

敬具、
misamas

+0


だから解決策は、(その進コード%25とURIにパスワードの%記号を置き換えるために)manager.resolveFile()は、このようなメソッドに渡す前に、UriParser.encode(sftpUriを)やっていましたssdhサーバのログファイルをチェックして、それが不平を言うのを見ることができます。たぶん、別の認証方法が必要なのかもしれません。あるいは、いくつかのttyやその他の設定を最初に確立しようとします。 – eckes

答えて

1

問題はパスワードでいました。 URIに渡されたときに特別な文字である%記号(pass%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); 
関連する問題