org.apache.commons.vfs.FileSystemException: не удалось подключиться к SFTP-серверу по адресу «sftp: // username: ***@114.XX.XX.XX/» на порту 21 - PullRequest
1 голос
/ 26 июня 2019

Я мог получить доступ к SFTP из WinSCP, используя следующие учетные данные

  • serverAddress = 114.XX.XX.XX
  • userId = orafusion
  • пароль = OraP! Ss! 123
  • remoteDirectory = TestData /
  • Port = 21

Lib используется:

  • Обще-vfs2-2.0.jar
  • JSch-0.1.50.jar

Я получаю приведенную ниже ошибку при попытке программного соединения с использованием Java. Когда я просмотрел ошибку в Google, все, что я мог получить, это специальный символ! используется в пароле. Поэтому используйте 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

Ниже приведен код, который я использую для загрузки файла из SFTP.

Ссылка на блог: https://www.mysamplecode.com/2013/06/sftp-apache-commons-file-download.html

Выход для UriParser.encode(sftpUri). Я могу сделать вывод, что ПОРТ здесь не добавлен

sftp://orafusion:OraP!ss!123@114.XX.XX.XX/TestData/TestFile.txt

Я получаю ошибку в приведенной ниже строке кода

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");

1 Ответ

1 голос
/ 26 июня 2019

Вы используете FTP в WinSCP, а не SFTP. Это два совершенно несовместимых протокола.

Или, возможно, зашифрованный вариант FTP, FTPS (FTP через TLS / SSL) - что может привести вас к путанице с SFTP.

Замените sftp:// в вашем URL на ftp:// или ftps://.
Смотри https://commons.apache.org/proper/commons-vfs/filesystems.html#FTP

...