Úspešne sa môžem spojiť s WinSCP pomocou určitých poverení na SFTP server. Ale keď to robím z javy pomocou apache vfs, mám chybu:
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)
Som skontroloval poverenia a sú to isté, ako pri pokuse o pripojenie s WinSCP. WinSCP sa môže úspešne pripojiť, ale môj java kód dostane vyššie uvedenú chybu (Auth fail).
Má niekto istý náznak, aký by mohol byť problém?
Verejná oblasť IP zariadenia, ku ktorému sa pripájam, bola pridaná k výnimkám brány firewall ako dôveryhodná adresa IP na druhej strane.
Prosím pomôžte, všetky nápady sú veľmi cenené.
so srdečným pozdravom
misamas
odpovede:
1 pre odpoveď č. 1Problém bol v hesle. Obsahoval znak%, ktorý je špeciálnym znakom pri prechode v URI (ako pass% word).
Takže riešenie robilo UriParser.encode (sftpUri) predtým, ako ho prenieslo na metódu manager.resolveFile () ako toto (s cieľom nahradiť% znamenia hesla v URI hexadecimálnym kódom% 25):
import org.apache.commons.vfs2.provider.UriParser;
...
String sftpUri = String.format("sftp://%s:%s@%s/%s/%s", configData.getUserId(), configData.getPassword(), configData.getServerAddress(),
configData.getRemoteDirectory(), configData.getFileName());
String sftpUriEncoded = UriParser.encode(sftpUri);
FileObject remoteFile = manager.resolveFile(sftpUriEncoded, options);