【问题标题】:j2ssh remote to remote file transferj2ssh远程到远程文件传输
【发布时间】:2017-01-09 23:13:03
【问题描述】:

以下代码适用于 localhost 到远程服务器。但是我的应用程序在单独的服务器上运行,所以我需要从 remote1 服务器中选择文件,然后将其放入 remote2 服务器。如何使用 J2SSH。

package com.test.sftp;

import java.io.File;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Properties;

import com.sshtools.daemon.SshServer;
import com.sshtools.j2ssh.SftpClient;
import com.sshtools.j2ssh.SshClient;
import com.sshtools.j2ssh.authentication.AuthenticationProtocolState;
import com.sshtools.j2ssh.authentication.PasswordAuthenticationClient;
import com.sshtools.j2ssh.configuration.SshConnectionProperties;
import com.sshtools.j2ssh.sftp.SftpFile;
import com.sshtools.j2ssh.transport.ConsoleKnownHostsKeyVerification;
import com.sshtools.j2ssh.transport.IgnoreHostKeyVerification;
import com.sshtools.j2ssh.transport.InvalidHostFileException;
import com.sshtools.j2ssh.transport.publickey.SshPublicKey;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;

public class SftpTest {

    /**
     * @param args
     */
 public String userName;

 public String uri;
 public Date date;
 public String sdate;
 public DateFormat formatter ;
 public String serviceStart;

    public String hostname=null;
    public String username=null;
    public String password=null;

    public String hostname1=null;
    public String username1=null;
    public String password1=null;

    public String remotepath=null;
    public String localpath=null;
    public String remoteFilename=null;
    public void con()
    {
    SshClient ssh=null;
    SftpClient sftp=null;
    SftpFile sstp = null;
    try
    {



    hostname="173.202.29.29";
    username="xxxxx";
    password="xxxxxxx";



    SshClient client = new SshClient();


    SshConnectionProperties connectionProperties = new SshConnectionProperties();

   connectionProperties.setTransportProvider(SshConnectionProperties.USE_STANDARD_SOCKET); // or USE_STANDARD_SOCKET or USE_SOCKS4_PROXY or USE_SOCKS5_PROXY
  connectionProperties.setProxyHost("inetgate.highmark.com");

     connectionProperties.setProxyPort(22);
     connectionProperties.setHost(hostname);
     connectionProperties.setPort(22);

   client.connect(connectionProperties, new IgnoreHostKeyVerification());

    PasswordAuthenticationClient authenticationClient = new PasswordAuthenticationClient();
    authenticationClient.setUsername(username);
    authenticationClient.setPassword(password);
    int result = client.authenticate(authenticationClient);
    System.out.println("result value ::"+result);
    if (result == AuthenticationProtocolState.COMPLETE)
    System.out.println("success Authentication");
    else
    System.out.println("failed Authentication");
    System.out.println(client.isConnected());


    SftpClient sftpClient = client.openSftpClient();
    String localpath = "C:/Documents and Settings/lidkv15/Desktop/images";
    sftpClient.lcd(localpath);
    //sftpClient.cd("/");





    File folder = new File("C:/Documents and Settings/user/Desktop/images");
    File[] listOfFiles = folder.listFiles();


    for (int i = 0; i < listOfFiles.length; i++) {
      if (listOfFiles[i].isFile()) {
          String str ="C:/Documents and Settings/lidkv15/Desktop/images/"+listOfFiles[i].getName();

       //  sftpClient.put(str,"/usr/project/images/");
          System.out.println("File " + listOfFiles[i].getName());
      } else if (listOfFiles[i].isDirectory()) {
        System.out.println("Directory " + listOfFiles[i].getName());
      }
    }









    sftpClient.quit();
    client.disconnect();
    }
    catch(Exception e)
    {
    System.out.println("Exception while connecting to the remote server" + e);
    }
    }
    public static void main(String args[]) throws Exception
    {
    SftpTest obj = new SftpTest();
     obj.con();// calling the function




    }







}

【问题讨论】:

    标签: java ssh sftp j2ssh


    【解决方案1】:

    不确定我是否理解您的问题......

    如果您只有对两台服务器的 SFTP 访问权限,并且您的代码在本地运行(在客户端上),那么您唯一的选择是下载文件并将其上传到另一台服务器。如果您可以通过 SSH 访问服务器 1,那么您可以创建一个脚本,将文件上传/下载到服务器 2。

    如果您的代码在server1上运行并且您需要将文件从server1上传到server2,那么当您将代码从client1上传到server2时,它与您当前的情况有什么不同(除了本地路径不同) ?

    【讨论】:

    • 运行它的应用程序我无法获得本地空间(生产服务器)从服务器1本地下载文件,然后将文件放入服务器2。