Рубрики
Без рубрики

Передача файлов с использованием SFTP на Java (JSch)

В этой статье показано, как использовать JSch для передачи файлов с помощью SFTP на Java.

В этой статье показано, как выполнить передачу файлов с удаленного сервера в локальную систему и наоборот, используя Протокол передачи файлов SSH (SFTP) на Java.

P.S Протестирован с JSch 0.1.55

1. Зависимость от JSch

  
      com.jcraft
      jsch
      0.1.55
  

2. Передача файлов – Примеры JSch

2.1 В JSch , мы можем использовать положить и получить для передачи файлов между серверами.

Мы используем put для передачи файлов из локальной системы на удаленный сервер.

channelSftp.put(localFile, remoteFile);

Мы используем get для загрузки файлов с удаленного сервера в локальную систему.

channelSftp.get(remoteFile, localFile);

2.2 Аутентификация по паролю.

  JSch jsch = new JSch();
  jsch.setKnownHosts("/home/mkyong/.ssh/known_hosts");
  jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT);

  jschSession.setPassword(PASSWORD);

2.3 Аутентификация по открытым и закрытым ключам, прочитайте это Используйте аутентификацию с открытым ключом с помощью SSH

  • Локальный закрытый ключ – /home/mkyong/.ssh/id_rsa
  • Удаленный открытый ключ – ~/.ssh/авторизованные ключи
  JSch jsch = new JSch();
  jsch.setKnownHosts("/home/mkyong/.ssh/known_hosts");
  jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT);

  jsch.addIdentity("/home/mkyong/.ssh/id_rsa");

2.4 Ознакомьтесь с этим полным JSch пример передачи файла из локальной системы на удаленный сервер 1.2.3.4 , аутентифицируйтесь с помощью пароля SSH.

package com.mkyong.io.howto;

import com.jcraft.jsch.*;

public class SFTPFileTransfer {

    private static final String REMOTE_HOST = "1.2.3.4";
    private static final String USERNAME = "";
    private static final String PASSWORD = "";
    private static final int REMOTE_PORT = 22;
    private static final int SESSION_TIMEOUT = 10000;
    private static final int CHANNEL_TIMEOUT = 5000;

    public static void main(String[] args) {

        String localFile = "/home/mkyong/local/random.txt";
        String remoteFile = "/home/mkyong/remote/afile.txt";

        Session jschSession = null;

        try {

            JSch jsch = new JSch();
            jsch.setKnownHosts("/home/mkyong/.ssh/known_hosts");
            jschSession = jsch.getSession(USERNAME, REMOTE_HOST, REMOTE_PORT);

            // authenticate using private key
            // jsch.addIdentity("/home/mkyong/.ssh/id_rsa");

            // authenticate using password
            jschSession.setPassword(PASSWORD);

            // 10 seconds session timeout
            jschSession.connect(SESSION_TIMEOUT);

            Channel sftp = jschSession.openChannel("sftp");

            // 5 seconds timeout
            sftp.connect(CHANNEL_TIMEOUT);

            ChannelSftp channelSftp = (ChannelSftp) sftp;

            // transfer file from local to remote server
            channelSftp.put(localFile, remoteFile);

            // download file from remote server to local
            // channelSftp.get(remoteFile, localFile);

            channelSftp.exit();

        } catch (JSchException | SftpException e) {

            e.printStackTrace();

        } finally {
            if (jschSession != null) {
                jschSession.disconnect();
            }
        }

        System.out.println("Done");
    }

}

3. ДЩ Исключения

Некоторые распространенные исключения.

3.1 Для исключения UnknownHostKey добавьте удаленный IP-адрес в known_hosts файл.

$ ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts

3.2 Для недействительного закрытого ключа преобразуйте закрытый ключ в другой формат.

$ ssh-keygen -p -f ~/.ssh/id_rsa -m pem

3.3 Для Ошибка авторизации убедитесь, что указанный пароль правильный.

com.jcraft.jsch.JSchException: Auth fail
	at com.jcraft.jsch.Session.connect(Session.java:519)
	at com.mkyong.io.howto.SFTPFileTransfer.main(SFTPFileTransfer.java:34)

Скачать Исходный Код

$клон git $клон git

$cd java-ввод-вывод

Рекомендации

Оригинал: “https://mkyong.com/java/file-transfer-using-sftp-in-java-jsch/”