Я пытаюсь получить файл с сервера, используя SFTP (в отличие от FTPS), используя Java. Как я могу это сделать?
228
Другой вариант - рассмотреть библиотеку JSch . JSch кажется предпочтительной библиотекой для нескольких крупных проектов с открытым исходным кодом, включая Eclipse, Ant и Apache Commons HttpClient, среди прочих.
Он поддерживает как пользовательский / проходной, так и логин на основе сертификатов, а также целый ряд других вкусных функций SSH2.
Вот простое удаленное получение файла через SFTP. Обработка ошибок оставлена в качестве упражнения для читателя :-)
JSch jsch = new JSch();
String knownHostsFilename = "/home/username/.ssh/known_hosts";
jsch.setKnownHosts( knownHostsFilename );
Session session = jsch.getSession( "remote-username", "remote-host" );
{
// "interactive" version
// can selectively update specified known_hosts file
// need to implement UserInfo interface
// MyUserInfo is a swing implementation provided in
// examples/Sftp.java in the JSch dist
UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);
// OR non-interactive version. Relies in host key being in known-hosts file
session.setPassword( "remote-password" );
}
session.connect();
Channel channel = session.openChannel( "sftp" );
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.get("remote-file", "local-file" );
// OR
InputStream in = sftpChannel.get( "remote-file" );
// process inputstream as needed
sftpChannel.exit();
session.disconnect();
Вот полный исходный код примера, использующего JSch, не беспокоясь о проверке ключа ssh.
источник
finally
Блок должен использоваться для включения канала код очистки, чтобы убедиться , что он всегда работает.com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 2048 (inclusive)
Ниже приведен пример использования Apache Common VFS:
источник
Это было решение, которое я придумал http://sourceforge.net/projects/sshtools/ (большая часть обработки ошибок для ясности опущена). Это выдержка из моего блога
источник
Хорошая абстракция поверх Jsch - это Apache commons-vfs, который предлагает API виртуальной файловой системы, который делает доступ к SFTP-файлам и их запись практически прозрачным. Хорошо сработало для нас.
источник
Есть хорошее сравнение трех зрелых библиотек Java для SFTP: Commons VFS, SSHJ и JSch
Подводя итог, можно сказать, что у SSHJ самый понятный API, и лучше всего, если вам не нужна поддержка других хранилищ, предоставляемая Commons VFS.
Вот отредактированный пример SSHJ из github :
источник
Файл общих свойств java для всех примеров
АдресСерверы = 111.222.333.444
= myUserId идентификатор пользователя
пароль = MyPassword
remoteDirectory = продукты /
localDirectory = импорт /
источник
hierynomus / sshj имеет полную реализацию SFTP версии 3 (что реализует OpenSSH)
Пример кода из SFTPUpload.java
источник
Библиотека JSch - это мощная библиотека, которую можно использовать для чтения файлов с SFTP-сервера. Ниже тестируемый код для чтения файла из SFTP-местоположения построчно
Пожалуйста, обратитесь к блогу для всей программы.
источник
Энди, чтобы удалить файл в удаленной системе, вам нужно использовать
(channelExec)
JSch и передать команды unix / linux для его удаления.источник
Попробуйте edtFTPj / PRO , зрелую, надежную клиентскую библиотеку SFTP, которая поддерживает пулы соединений и асинхронные операции. Также поддерживает FTP и FTPS, так что все основы для безопасной передачи файлов покрыты.
источник
Я нашел полный рабочий пример для SFTP в Java с использованием JSCH API http://kodehelp.com/java-program-for-uploading-file-to-sftp-server/
источник
Хотя приведенные выше ответы были очень полезны, я потратил целый день, чтобы заставить их работать, сталкиваясь с различными исключениями, такими как «неработающий канал», «ключ rsa неизвестен» и «поврежден пакет».
Ниже приведен рабочий класс многократного использования для загрузки / выгрузки файлов SFTP с использованием библиотеки JSch.
Загрузить использование:
Скачать использование:
Код класса:
источник
У вас также есть JFileUpload с надстройкой SFTP (Java тоже): http://www.jfileupload.com/products/sftp/index.html
источник
Я использую этот SFTP API под названием Zehon, он великолепен, поэтому его легко использовать с большим количеством примеров кода. Вот сайт http://www.zehon.com
источник
Лучшее решение, которое я нашел, это Paramiko . Там есть версия на Java.
источник