[英]org.apache.commons.vfs.FileSystemException: Could not connect to SFTP server at "sftp://username:***@114.XX.XX.XX/" on port 21
I could access SFTP from WinSCP using the below credentials我可以使用以下凭据从 WinSCP 访问 SFTP
Lib used:使用的库:
I get the below error when try to connect programmatically using Java.尝试使用 Java 以编程方式连接时出现以下错误。 When I browsed google for the error, all I could get was special character !
当我浏览谷歌的错误时,我能得到的只是特殊字符! is used in password.
用于密码。 Therefore use
UriParser.encode(sftpuri)
that will resolve the problem but unfortunately it didn't help.因此使用
UriParser.encode(sftpuri)
可以解决问题,但不幸的是它没有帮助。
org.apache.commons.vfs.FileSystemException: Could not connect to SFTP server at "sftp://orafusion:***@114.XX.XX.XX/".
at org.apache.commons.vfs.provider.sftp.SftpFileProvider.doCreateFileSystem(SftpFileProvider.java:99)
at org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.getFileSystem(AbstractOriginatingFileProvider.java:103)
at org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:82)
at org.apache.commons.vfs.provider.AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:66)
at org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:692)
at org.apache.commons.vfs.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:620)
at com.gfi.oracle.penalty.view.bean.GetMyFiles.startFTP(GetMyFiles.java:76)
at com.gfi.oracle.penalty.view.bean.GetMyFiles.main(GetMyFiles.java:38)
Caused by: org.apache.commons.vfs.FileSystemException: Could not connect to SFTP server at "114.XX.XX.XX".
at org.apache.commons.vfs.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:214)
at org.apache.commons.vfs.provider.sftp.SftpFileProvider.doCreateFileSystem(SftpFileProvider.java:90)
... 7 more
Caused by: com.jcraft.jsch.JSchException: Session.connect: java.net.SocketTimeoutException: Read timed out
at com.jcraft.jsch.Session.connect(Session.java:495)
at com.jcraft.jsch.Session.connect(Session.java:150)
at org.apache.commons.vfs.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:210)
... 8 more
Below is the code I'm using for downloading file from SFTP.下面是我用于从 SFTP 下载文件的代码。
Blog reference: https://www.mysamplecode.com/2013/06/sftp-apache-commons-file-download.html博客参考: https ://www.mysamplecode.com/2013/06/sftp-apache-commons-file-download.html
Output for UriParser.encode(sftpUri)
. UriParser.encode(sftpUri)
的输出。 I could infer that the PORT is not appended here我可以推断这里没有附加端口
sftp://orafusion:OraP!ss!123@114.XX.XX.XX/TestData/TestFile.txt
I get error at the below line of code我在下面的代码行中收到错误
FileObject remoteFile = manager.resolveFile(UriParser.encode(sftpUri), opts);
props = new Properties();
StandardFileSystemManager manager = new StandardFileSystemManager();
props.load(new FileInputStream("D:\\common.properties")); // + propertiesFilename));
String serverAddress = props.getProperty("serverAddress").trim();
String userId = props.getProperty("userId").trim();
String password = props.getProperty("password").trim();
String remoteDirectory = props.getProperty("remoteDirectory").trim();
String localDirectory = props.getProperty("localDirectory").trim();
//Initializes the file manager
manager.init();
//Setup our SFTP configuration
FileSystemOptions opts = new FileSystemOptions();
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);
SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 10000);
//Create the SFTP URI using the host name, userid, password, remote path and file name
String sftpUri = "sftp://" + userId + ":" + password + "@" + serverAddress + "/" +
remoteDirectory + fileToDownload;
// Create local file object
String filepath = localDirectory + fileToDownload;
File file = new File(filepath);
FileObject localFile = manager.resolveFile(file.getAbsolutePath());
System.out.println("sftp uri : " + UriParser.encode(sftpUri));
// Create remote file object
FileObject remoteFile = manager.resolveFile(UriParser.encode(sftpUri), opts);
// Copy local file to sftp serverF
localFile.copyFrom(remoteFile, Selectors.SELECT_SELF);
System.out.println("File download successful");
You are using FTP in WinSCP, not SFTP.您在 WinSCP 中使用 FTP,而不是 SFTP。 These are two completely incompatible protocols.
这是两个完全不兼容的协议。
Or possibly the encrypted variant of FTP, the FTPS (FTP over TLS/SSL) – what might lead you to the confusion with SFTP.或者可能是 FTP 的加密变体,FTPS(基于 TLS/SSL 的 FTP)——这可能会导致您与 SFTP 混淆。
Replace the sftp://
in your URL with ftp://
or ftps://
.将 URL 中的
sftp://
替换为ftp://
或ftps://
。
See https://commons.apache.org/proper/commons-vfs/filesystems.html#FTP见https://commons.apache.org/proper/commons-vfs/filesystems.html#FTP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.