j2ssh远程到远程文件传输

时间:2011-01-31 21:28:05

标签: java ssh sftp j2ssh

以下代码适用于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




    }







}

1 个答案:

答案 0 :(得分:0)

不确定我理解你的问题......

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

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