Java-код для копирования файлов с одной Linux-машины на другую Linux-машину

Я ищу Java-код для копирования файлов в удаленную систему Linux. Я попробовал Runtime.getRuntime().exec() , передав команду scp , но каждый раз, когда я запускаю программу, она запрашивает пароль удаленной системы. Я бы хотел этого избежать.

Я просмотрел библиотеку Jsch – используя это, я могу войти в удаленную систему, но я не могу скопировать файлы в удаленную систему. Как только я вхожу в систему, я могу сделать scp для своего хоста, но опять же для этого требуется имя пользователя и пароль хост-системы. Однако я имею только информацию о дистанционной системе.

Для копирования файла с одного хоста на другой требуется демон на удаленном хосте, реализующий некоторый протокол передачи файлов на уровне приложения. Это требование, независимо от того, на каком языке вы собираетесь поговорить с этим удаленным демоном.

Ваши варианты для систем Linux:

  • SSH. Для этого требуется демон SSH (например, openssh-server) на удаленной стороне. Поскольку ssh предназначен для обеспечения безопасности, вам придется настроить удаленный хост для аутентификации с помощью пароля или закрытого ключа. Фактически копирование файла может быть выполнено с помощью утилиты scp или клиентской библиотеки ssh (например, jsch).
  • NFS. Удаленный узел устанавливает демона (например, samba) и делится некоторыми файлами. Возможно, ваш локальный компьютер (пакет cifs-utils) может подключить удаленное расположение в локальной файловой системе. Таким образом вы можете скопировать файл на удаленный хост, просто скопировав файл локально. Аутентификация является необязательной, файлы отправляются в сети по сети.
  • FTP. FTP-сервер устанавливается на удаленную сторону и настроен для доступа к определенным местам для определенных пользователей. Затем вы можете использовать любой ftp-клиент или некоторую ftp-клиентскую библиотеку (например, библиотеку commons-net из проекта Apache), чтобы подключиться к удаленному ftp-серверу и скопировать файлы. Аутентификация является необязательной, файлы отправляются в сети по сети.

Все это похоже на большую работу, и на деле это потому, что в большинстве систем не существует ни одного широко принятого и стандартизованного протокола, который будет реализован и настроен как готовый.

Вы можете использовать этот фрагмент кода для копирования файлов на другую linux машину.

 JSch jsch = new JSch(); Session session = null; session = jsch.getSession("username","hostname",22); session.setPassword("password"); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); ChannelSftp channel = null; channel = (ChannelSftp)session.openChannel("sftp"); channel.connect(); File localFile = new File("localfilepath"); //If you want you can change the directory using the following line. channel.cd(RemoteDirectoryPath) channel.put(new FileInputStream(localFile),localFile.getName()); channel.disconnect(); session.disconnect(); 

с этим я добавил свой открытый ключ к удаленной системе, сгенерированный с помощью ssh-keygen Поэтому он не будет запрашивать пароль при каждом запуске программы.