突发奇想,想用JAVA代码实现执行Linux脚本,实现 增量文件的上传然后重启Tomcat服务器. 经百度后发现了可行的方式.
1: 需要借助于 ganymed-ssh2-build210.jar jar
2: 默认一次只能执行一个命令(不然会抛出A remote execution has already started.) 要想实现执行多个命令 需要执行多次 或者 写成批文件的形式 再或者 几条命令合并成为一条语句执行package ssh;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.Scanner;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
public class Scpclient {
// IP
private String ip;
// 端口
private int port;
// 用户名
private String username;
// 密码
private String password;
// 实例
static private Scpclient instance;
static synchronized public Scpclient getInstance(String IP, int port, String username, String passward) {
if (instance == null) {
instance = new Scpclient(IP, port, username, passward);
}
return instance;
}
public Scpclient(String IP, int port, String username, String passward) {
this.ip = IP;
this.port = port;
this.username = username;
this.password = passward;
}
public void getFile(String remoteFile, String localTargetDirectory) {
Connection conn = null;
try {
conn = new Connection(ip, port);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false) {
System.err.println("authentication failed");
}
SCPClient client = new SCPClient(conn);
client.get(remoteFile, localTargetDirectory);
conn.close();
} catch (IOException ex) {
Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null, ex);
}finally {
if (conn != null) conn.close();
}
}
public void putFile(String localFile, String remoteTargetDirectory) {
Connection conn = null;
try {
conn = new Connection(ip, port);
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword(username, password);
if (isAuthenticated == false) {
System.err.println("authentication failed");
}
SCPClient client = new SCPClient(conn);
client.put(localFile, remoteTargetDirectory);
conn.close();
} catch (IOException ex) {
Logger.getLogger(SCPClient.class.getName()).log(Level.SEVERE, null, ex);
}finally {
if (conn != null) conn.close();
}
}
/**
* 上传文件
* @param localFile
* @param remoteFileName
* @param remoteTargetDirectory
* @param mode
* Author:YCM