scp через java - PullRequest
       133

scp через java

70 голосов
/ 14 октября 2008

Каков наилучший метод выполнения передачи scp через язык программирования Java? Кажется, я смогу выполнить это через JSSE, JSch или java-библиотеки с надувным замком. Похоже, ни одно из этих решений не имеет простого ответа.

Ответы [ 13 ]

0 голосов
/ 25 октября 2013

jsCH отлично сработал для меня. Ниже приведен пример метода, который подключается к серверу sftp и загружает файлы в указанный каталог. Рекомендуется держаться подальше от отключения StrictHostKeyChecking. Хотя настройка немного сложнее, по соображениям безопасности указание известных хостов должно быть нормой.

jsch.setKnownHosts ("C: \ Users \ test \ known_hosts"); рекомендуется

JSch.setConfig ("StrictHostKeyChecking", "no"); - не рекомендуется

import com.jcraft.jsch.*;
 public void downloadFtp(String userName, String password, String host, int port, String path) {


        Session session = null;
        Channel channel = null;
        try {
            JSch ssh = new JSch();
            JSch.setConfig("StrictHostKeyChecking", "no");
            session = ssh.getSession(userName, host, port);
            session.setPassword(password);
            session.connect();
            channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftp = (ChannelSftp) channel;
            sftp.get(path, "specify path to where you want the files to be output");
        } catch (JSchException e) {
            System.out.println(userName);
            e.printStackTrace();


        } catch (SftpException e) {
            System.out.println(userName);
            e.printStackTrace();
        } finally {
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }

    }
0 голосов
/ 08 сентября 2013

JSch - хорошая библиотека для работы. У него довольно простой ответ на ваш вопрос.

JSch jsch=new JSch();
  Session session=jsch.getSession(user, host, 22);
  session.setPassword("password");


  Properties config = new Properties();
  config.put("StrictHostKeyChecking","no");
  session.setConfig(config);
  session.connect();

  boolean ptimestamp = true;

  // exec 'scp -t rfile' remotely
  String command="scp " + (ptimestamp ? "-p" :"") +" -t "+rfile;
  Channel channel=session.openChannel("exec");
  ((ChannelExec)channel).setCommand(command);

  // get I/O streams for remote scp
  OutputStream out=channel.getOutputStream();
  InputStream in=channel.getInputStream();

  channel.connect();

  if(checkAck(in)!=0){
    System.exit(0);
  }

  File _lfile = new File(lfile);

  if(ptimestamp){
    command="T "+(_lfile.lastModified()/1000)+" 0";
    // The access time should be sent here,
    // but it is not accessible with JavaAPI ;-<
    command+=(" "+(_lfile.lastModified()/1000)+" 0\n");
    out.write(command.getBytes()); out.flush();
    if(checkAck(in)!=0){
      System.exit(0);
    }
  }

Вы можете найти полный код на

http://faisalbhagat.blogspot.com/2013/09/java-uploading-file-remotely-via-scp.html

0 голосов
/ 14 июля 2013

Я написал сервер scp, который намного проще, чем другие. Я использую проект Apache MINA (Apache SSHD) для его разработки. Вы можете посмотреть здесь: https://github.com/boomz/JSCP Также вы можете скачать файл jar из каталога /jar. Как пользоваться? Взгляните на: https://github.com/boomz/JSCP/blob/master/src/Main.java

...