1. 程式人生 > >java:ssh連接服務器,實現本地文件上傳和下載

java:ssh連接服務器,實現本地文件上傳和下載

scp lock str path close gen conn 連接服務器 超時

1.連接至服務器:ssh [email protected] -p 5555

下載文件:scp -r [email protected]:/ccc(服務器路徑,文件夾下所有文件) /path(本地路徑)

上傳文件:scp /ccc(本地文件路徑)

2.文件上傳:

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class Test { public static void main(String[] args) { try { sshSftp("10.10.17.19", "lenovo", "123456", 5555); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
public static void sshSftp(String ip, String user, String psw ,int port) throws Exception{ Session session = null; ChannelSftp channel = null; JSch jsch = new JSch(); if(port <=0){ //連接服務器,采用默認端口 session = jsch.getSession(user, ip); }
else{ //采用指定的端口連接服務器 session = jsch.getSession(user, ip ,port); } //如果服務器連接不上,則拋出異常 if (session == null) { throw new Exception("session is null"); } //設置第一次登陸的時候提示,可選值:(ask | yes | no) session.setConfig("StrictHostKeyChecking", "no"); //設置登陸主機的密碼 session.setPassword(psw);//設置密碼 //設置登陸超時時間 session.connect(); try { //創建sftp通信通道 channel = (ChannelSftp) session.openChannel("sftp"); channel.connect(1000); ChannelSftp sftp = (ChannelSftp) channel; //進入服務器指定的文件夾 sftp.cd("1047"); //列出服務器指定的文件列表 Vector v = sftp.ls("*.txt"); for(int i=0;i<v.size();i++){ System.out.println(v.get(i)); } //以下代碼實現從本地上傳一個文件到服務器,如果要實現下載,對換以下流就可以了 OutputStream outstream = sftp.put("666666666.txt"); InputStream instream = new FileInputStream(new File("c:/print.txt")); byte b[] = new byte[1024]; int n; while ((n = instream.read(b)) != -1) { outstream.write(b, 0, n); } outstream.flush(); outstream.close(); instream.close(); } catch (Exception e) { e.printStackTrace(); } finally { session.disconnect(); channel.disconnect(); } } }

3.文件下載:

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Vector;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;


public class Test2 {
    public static void main(String[] args) {
        try {
            sshSftp("10.10.17.19", "lenovo", "123456", 5555);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void sshSftp(String ip, String user, String psw ,int port) throws Exception{
        Session session = null;
        ChannelSftp channel = null;
        
        
        JSch jsch = new JSch();
        
        
        if(port <=0){
            //連接服務器,采用默認端口
            session = jsch.getSession(user, ip);
        }else{
            //采用指定的端口連接服務器
            session = jsch.getSession(user, ip ,port);
        }

        //如果服務器連接不上,則拋出異常
        if (session == null) {
            throw new Exception("session is null");
        }
        
        //設置第一次登陸的時候提示,可選值:(ask | yes | no)
        session.setConfig("StrictHostKeyChecking", "no");
        //設置登陸主機的密碼
        session.setPassword(psw);//設置密碼   
    
        //設置登陸超時時間   
        session.connect();
        
        try {
            //創建sftp通信通道
            channel = (ChannelSftp) session.openChannel("sftp");
            channel.connect(1000);
            ChannelSftp sftp = (ChannelSftp) channel;
            
            
            //進入服務器指定的文件夾
            sftp.cd("1047");
            
            //列出服務器指定的文件列表
            Vector v = sftp.ls("*.txt");
            for(int i=0;i<v.size();i++){
                System.out.println(v.get(i));
            }
            
            //下載
            InputStream instream = sftp.get("666666666.txt");
            OutputStream outstream = new FileOutputStream(new File("c:/print.txt"));
            
            byte b[] = new byte[1024];
            int n;
            while ((n = instream.read(b)) != -1) {
                outstream.write(b, 0, n);
            }
            
            outstream.flush();
            outstream.close();
            instream.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.disconnect();
            channel.disconnect();
        }
    }
}

java:ssh連接服務器,實現本地文件上傳和下載