可远程下载sftp服务器上的文件,可以远程执行Linux指令,可以设置代理。
package com.download.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.HTTPProxyData;
import ch.ethz.ssh2.ProxyData;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class GanymedUtils {
/**
* 远程文件下载
*
* @param ip 远程ip
* @param userName 用户名
* @param userPwd 密码
* @param remoteFile 远程文件
* @param localFile 本地目录(不是文件)
* @param proxyHost 代理的ip
* @param proxyPort 代理的端口
* @return
*/
public static boolean downloadFile(String ip, String userName, String userPwd, String remoteFile, String localFile,
String proxyHost, int proxyPort) {
Connection conn = new Connection(ip);
boolean flag;
try {
if (proxyPort != 0) {
log.info("使用代理");
ProxyData proxyData = new HTTPProxyData(proxyHost, proxyPort);
conn.setProxyData(proxyData);
} else {
log.info("不使用代理");
}
conn.connect();
flag = conn.authenticateWithPassword(userName, userPwd);
if (flag) {
SCPClient sftp = conn.createSCPClient();
log.info("remoteFile:".concat(remoteFile));
log.info("localFile:".concat(localFile));
sftp.get(remoteFile, localFile);
log.info("ganymed下载成功");
return true;
}
return false;
} catch (IOException e) {
log.error("ganymed下载失败");
e.printStackTrace();
return false;
}
}
/**
*
* @param ip 远程Linux服务器ip
* @param userName 远程用户名
* @param userPwd 远程密码
* @param cmd 需要执行的指令
* @return
*/
public static boolean executeCmd(String ip, String userName, String userPwd, String cmd) {
boolean flag;
Session session = null;
InputStream inputStream;
String result;
Connection conn = new Connection(ip);
try {
conn.connect();
flag = conn.authenticateWithPassword(userName, userPwd);
if (flag) {
session = conn.openSession();
session.execCommand(cmd);
inputStream = session.getStdout();
// 获取控制台标准输出
result = processStdout(inputStream, "utf-8");
// 如果输出为空,则说明执行失败,获取失败信息
if (result == null || result.length() == 0) {
result = processStdout(session.getStderr(), "utf-8");
}
System.out.println(result);
}
return flag;
} catch (IOException e) {
return false;
} finally {
if (session != null) {
session.close();
}
if (conn != null) {
conn.close();
}
}
}
/**
* 获取控制台输出信息
*
* @param inputStream
* @param charset
* @return
*/
public static String processStdout(InputStream inputStream, String charset) {
InputStream in = new StreamGobbler(inputStream);
StringBuffer stringBuffer = new StringBuffer();
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new InputStreamReader(in, charset));
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
bufferedReader.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return stringBuffer.toString();
}
}