java利用Jsch实现在windows平台远程操作linux服务器

说明:exec用于执行命令;sftp用于文件处理
  1 package com.wyg.simple;
  2 
  3 import java.io.BufferedReader;
  4 import java.io.File;
  5 import java.io.FileInputStream;
  6 import java.io.FileNotFoundException;
  7 import java.io.IOException;
  8 import java.io.InputStream;
  9 import java.io.InputStreamReader;
 10 import java.util.Properties;
 11 import java.util.Vector;
 12 
 13 import com.jcraft.jsch.Channel;
 14 import com.jcraft.jsch.ChannelExec;
 15 import com.jcraft.jsch.ChannelSftp;
 16 import com.jcraft.jsch.JSch;
 17 import com.jcraft.jsch.JSchException;
 18 import com.jcraft.jsch.Session;
 19 import com.jcraft.jsch.SftpException;
 20 
 21 public class JSchUtils {
 22     private static JSch jsch;
 23     private static Session session;
 24 
 25     /**
 26      * 连接到指定的IP
 27      * 
 28      * @throws JSchException
 29      */
 30     public static void connect(String user, String passwd, String host, int port) throws JSchException {
 31         jsch = new JSch();// 创建JSch对象
 32         session = jsch.getSession(user, host, port);// 根据用户名、主机ip、端口号获取一个Session对象
 33         session.setPassword(passwd);// 设置密码
 34 
 35         Properties config = new Properties();
 36         config.put("StrictHostKeyChecking", "no");
 37         session.setConfig(config);// 为Session对象设置properties
 38         session.setTimeout(1500);// 设置超时
 39         session.connect();// 通过Session建立连接
 40     }
 41 
 42     /**
 43      * 关闭连接
 44      */
 45     public static void close() {
 46         session.disconnect();
 47     }
 48 
 49     /**
 50      * 执行相关的命令
 51      * 
 52      * @throws JSchException
 53      */
 54     public static void execCmd(String command) throws JSchException {
 55         BufferedReader reader = null;
 56         Channel channel = null;
 57         try {
 58             if (command != null) {
 59                 channel = session.openChannel("exec");
 60                 ((ChannelExec) channel).setCommand(command);
 61                 // ((ChannelExec) channel).setErrStream(System.err);
 62                 channel.connect();
 63 
 64                 InputStream in = channel.getInputStream();
 65                 reader = new BufferedReader(new InputStreamReader(in));
 66                 String buf = null;
 67                 while ((buf = reader.readLine()) != null) {
 68                     System.out.println(buf);
 69                 }
 70             }
 71         } catch (IOException e) {
 72             e.printStackTrace();
 73         } catch (JSchException e) {
 74             e.printStackTrace();
 75         } finally {
 76             try {
 77                 reader.close();
 78             } catch (IOException e) {
 79                 e.printStackTrace();
 80             }
 81             channel.disconnect();
 82         }
 83     }
 84 
 85     /**
 86      * 上传文件
 87      *
 88      * @param directory
 89      *            上传的目录
 90      * @param uploadFile
 91      *            要上传的文件
 92      * @param sftp
 93      * @throws JSchException
 94      * @throws SftpException
 95      * @throws FileNotFoundException
 96      */
 97     public void upload(String directory, String uploadFile) throws JSchException, FileNotFoundException, SftpException {
 98         ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
 99         channelSftp.cd(directory);
100         File file = new File(uploadFile);
101         channelSftp.put(new FileInputStream(file), file.getName());
102         System.out.println("Upload Success!");
103     }
104 
105     /**
106      * 下载文件
107      * 
108      * @param src
109      * @param dst
110      * @throws JSchException
111      * @throws SftpException
112      */
113     public static void download(String src, String dst) throws JSchException, SftpException {
114         // src linux服务器文件地址,dst 本地存放地址
115         ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
116         channelSftp.connect();
117         channelSftp.get(src, dst);
118         channelSftp.quit();
119     }
120 
121     /**
122      * 删除文件
123      *
124      * @param directory
125      *            要删除文件所在目录
126      * @param deleteFile
127      *            要删除的文件
128      * @param sftp
129      * @throws SftpException
130      * @throws JSchException
131      */
132     public void delete(String directory, String deleteFile) throws SftpException, JSchException {
133         ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
134         channelSftp.cd(directory);
135         channelSftp.rm(deleteFile);
136     }
137 
138     /**
139      * 列出目录下的文件
140      *
141      * @param directory
142      *            要列出的目录
143      * @param sftp
144      * @return
145      * @throws SftpException
146      * @throws JSchException
147      */
148     @SuppressWarnings("rawtypes")
149     public Vector listFiles(String directory) throws JSchException, SftpException {
150         ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp");
151         return channelSftp.ls(directory);
152     }
153 
154     public static void main(String[] args) {
155         try {
156             // 1.连接到指定的服务器
157             connect("root", "sankairoot", "10.0.0.251", 22);
158 
159             // 2.执行相关的命令
160             execCmd("grep '160622150549943666' /data/apps/nginx/logs/access_2016-07-07.log >> /data/nginx_log.20160707.txt");
161 
162             // 3.下载文件
163             download("/data/nginx_log.20160707.txt", "D:\temp");
164 
165             // 4.关闭连接
166             close();
167         } catch (JSchException e) {
168             // TODO Auto-generated catch block
169             e.printStackTrace();
170         } catch (SftpException e) {
171             // TODO Auto-generated catch block
172             e.printStackTrace();
173         }
174     }
175 }
原文地址:https://www.cnblogs.com/gangzi2013/p/5650764.html