`
border
  • 浏览: 201216 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

J2SSH Maverick 一段连接sftp服务器,上传,下载的代码:

阅读更多

J2SSH Maverick
Version 1.2.6

一段连接sftp服务器,上传,下载的代码:
import com.maverick.ssh.*;
import com.maverick.ssh1.Ssh1Client;
import com.maverick.ssh2.*;
import java.io.*;
import com.sshtools.net.*;
import com.sshtools.sftp.*;
import com.maverick.sftp.*;
import com.sshtools.publickey.ConsoleKnownHostsKeyVerification;
/**
 * This example demonstrates the connection process connecting to an SSH2 server and
 * usage of the SFTP client.
 *
 * @author Lee David Painter
 * @version $Id: SftpConnect.java,v 1.8 2006/01/30 17:46:04 lee Exp $
 *
 */
public class SftpConnect {
     public static void main(String[] args) {
          final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
          String str = "user.home";

          try {
               System.out.print("Hostname: ");
              // String hostname = reader.readLine();
               String hostname = "192.168.1.237";
               int idx = hostname.indexOf(':');
               int port = 22;
               if(idx > -1) {
                    port = Integer.parseInt(hostname.substring(idx+1));
                    hostname = hostname.substring(0, idx);
               }
               System.out.print("Username [Enter for " + System.getProperty("user.name") + "]: ");
               //String username = reader.readLine();
               String username = "linuxborder";
               if(username==null || username.trim().equals(""))
                    username = System.getProperty("user.name");
               System.out.println("Connecting to " + hostname);
               /**
                * Create an SshConnector instance
                */
               SshConnector con = SshConnector.getInstance();
               // Lets do some host key verification
               con.getContext(SshConnector.SSH2).setHostKeyVerification(new ConsoleKnownHostsKeyVerification());
               // Set the preferred cipher to AES for best transfer performance
               Ssh2Context ssh2Context = (Ssh2Context)con.getContext(SshConnector.SSH2);
               ssh2Context.setPreferredPublicKey(Ssh2Context.PUBLIC_KEY_SSHDSS);
               ssh2Context.supportedCiphers().add("aes128-cbc", com.sshtools.cipher.AES128Cbc.class);
               ssh2Context.setPreferredCipherCS("aes128-cbc");
               ssh2Context.setPreferredCipherSC("aes128-cbc");
               /**
                * Connect to the host
                */
               SocketTransport t = new SocketTransport(hostname, port);
               t.setTcpNoDelay(true);
               SshClient ssh = con.connect(t, username);
               /**
                * Determine the version
                */
               if(ssh instanceof Ssh1Client) {
                    System.out.println(hostname + " is an SSH1 server!! SFTP is not supported");
                    ssh.disconnect();
                    System.exit(0);
               }
               else
                    System.out.println(hostname + " is an SSH2 server");
               Ssh2Client ssh2 = (Ssh2Client)ssh;
               /**
                * Authenticate the user using password authentication
                */
               com.maverick.ssh.PasswordAuthentication pwd = new com.maverick.ssh.PasswordAuthentication();
               do {
                    System.out.print("Password: ");
                    pwd.setPassword("linuxborder");
                   // pwd.setPassword(reader.readLine());
               }
               while(ssh2.authenticate(pwd)!=SshAuthentication.COMPLETE
                         && ssh.isConnected());
               /**
                * Start a session and do basic IO
                */
               if(ssh.isAuthenticated()) {
                   SftpClient sftp = new SftpClient(ssh2);
                   System.out.println("******************************************");
                   System.out.println(" sftp.pwd() " +sftp.pwd());
                   sftp.mkdir("netsky");
                   System.out.println(" sftp.pwd() " +sftp.getAbsolutePath("netsky"));
                   sftp.cd("netsky");
                   /**
                    * Perform some text mode operations
                    */
                   sftp.setTransferMode(SftpClient.MODE_TEXT);
                   File textFile = new File(System.getProperty("user.home"), "shining.txt");
                   FileOutputStream tout = new FileOutputStream(textFile);
                   // Create a file with \r\n as EOL
                   for(int i=0;i<5;i++) {
                       tout.write("All work and no play makes Jack a dull boy\r\n".getBytes());
                   }
                   tout.close();
                   // Tell the client which EOL the remote client is using - note
                   // that this will be ignored with version 4 of the protocol
                   sftp.setRemoteEOL(SftpClient.EOL_LF);
                   // Now put the file, the remote file should end up with all \r\n changed to \n
                   sftp.put(textFile.getAbsolutePath());
                   /**
                    * Now perform some binary operations
                    */
                   sftp.setTransferMode(SftpClient.MODE_BINARY);
                   /**
                     * List the contents of the directory
                     */
                    SftpFile[] ls = sftp.ls();
                    for(int i=0;i<ls.length;i++) {
                      System.out.println(ls[i].toString());
                      System.out.println(SftpClient.formatLongname(ls[i]));
                    }
                      /**
                       * Generate a temporary file for uploading/downloading
                       */
                  
                      File f = new File(System.getProperty(str), "sftp-file");
                      java.util.Random rnd = new java.util.Random();
                      FileOutputStream out = new FileOutputStream(f);
                      byte[] buf = new byte[1024];
                      for(int i=0;i<30;i++) {
                        rnd.nextBytes(buf);
                        out.write(buf);
                      }
                      out.close();
                      /**
                     * Create a directory
                     */
                    sftp.mkdirs("sftp/test-files");
                    /**
                     * Change directory
                     */
                    sftp.cd("sftp/test-files");
                    /**
                     * Put a file into our new directory
                     */
                    long length = f.length();
                    System.out.println("Putting file");
                    long t1 = System.currentTimeMillis();
                    sftp.put(f.getAbsolutePath());
                    long t2 = System.currentTimeMillis();
                    System.out.println("Completed.");
                    long e = t2-t1;
                    System.out.println("Took " + String.valueOf(e) + " milliseconds");
                    float secs, kbs;
                    if(e >= 1000) {
                      kbs = ((float)length / 1024) / ((float)e / 1000);
                      System.out.println("Upload Transfered at " + String.valueOf(kbs) +
                                         " kbs");
                    }
                    /**
                     * Get the attributes of the uploaded file
                     */
                    System.out.println("Getting attributes of the remote file");
                    SftpFileAttributes attrs = sftp.stat(f.getName());
                    System.out.println(SftpClient.formatLongname(attrs, f.getName()));
                    /**
                     * Download the file inot a new location
                     */
                    File f2 = new File(System.getProperty(str), "downloaded");
                    f2.mkdir();
                    sftp.lcd(f2.getAbsolutePath());
                    System.out.println("Getting file");
                    t1 = System.currentTimeMillis();
                    sftp.get(f.getName());
                    t2 = System.currentTimeMillis();
                    System.out.println("Completed.");
                    e = t2-t1;
                    System.out.println("Took " + String.valueOf(e) + " milliseconds");
                    if(e >= 1000) {
                      kbs = ((float)length / 1024) / ((float)e / 1000);
                      System.out.println("Download Transfered at " + String.valueOf(kbs) +
                                         " kbs");
                    }

                /**
                 * Set the permissions on the file and check they were changed
                 * they should be -rw-r--r--
                 */
                sftp.chmod(0644, f.getName());
                attrs = sftp.stat(f.getName());
                System.out.println(SftpClient.formatLongname(attrs, f.getName()));
                System.out.println("******************************************");
                System.out.println(" sftp.pwd() " + sftp.pwd());
                sftp.quit();
                ssh.disconnect();
              }
               } catch(Throwable th) {
               th.printStackTrace();
          }
     }
}


分享到:
评论
2 楼 zhu_min726 2008-10-14  
我的maverick-all.jar里面没com.sshtools.cipher包  
1 楼 zhu_min726 2008-10-14  
为什么老是有com.sshtools.cipher这种问题

相关推荐

Global site tag (gtag.js) - Google Analytics