Java執行linux命令及shell指令碼
阿新 • • 發佈:2019-08-04
import java.io.*;
import java.util.*;
import org.apache.log4j.Logger;
import com.jcraft.jsch.*;
public class SshServerUtils {
private static final Logger log = Logger.getLogger(SshServerUtils.class);
private static Session session;
//連線伺服器
private static void connect(String username, String passwd, String host, int port) {
try {
JSch jsch = new JSch();
//獲取sshSession
session = jsch.getSession(username, host, port);
//新增密碼
session.setPassword(passwd);
Properties sshConfig = new Properties();
//嚴格主機金鑰檢查
sshConfig.put("StrictHostKeyChecking", "no");
session.setConfig(sshConfig);
//開啟sshSession連線
session.connect();
log.info("Server connection successful.");
} catch (JSchException e) {
e.printStackTrace();
}
}
//執行相關命令
public static String execCmd(String command, String username, String passwd, String host, int port, String outFilePath) {
String resultJson = null;
ChannelExec channelExec = null;
if (command != null) {
try {
connect(username, passwd, host, port);
channelExec = (ChannelExec) session.openChannel("exec");
// 設定需要執行的shell命令
channelExec.setCommand(command);
log.info("linux命令:" + command);
channelExec.setInputStream(null);
channelExec.setErrStream(System.err);
channelExec.connect();
//讀資料
resultJson = getServerData(host, port, username, passwd, outFilePath);
} catch (JSchException e) {
e.printStackTrace();
} finally {
if (null != channelExec) {
channelExec.disconnect();
}
}
}
return resultJson;
}
// 從 伺服器 獲取 資料
private static String getServerData(String host, int port, String username,String password, String filePath) {
ChannelSftp sftp = null;
StringBuffer buffer = new StringBuffer();
try {
if (!session.isConnected()) {
connect(username, password, host, port);
}
//獲取sftp通道
Channel channel = session.openChannel("sftp");
//開啟
channel.connect();
sftp = (ChannelSftp) channel;
log.info("Connected to " + host + ".");
//獲取生成檔案流
InputStream inputStream = sftp.get(filePath);
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String line = "";
while ((line = in.readLine()) != null) {
buffer.append(line);
}
//關閉流
inputStream.close();
in.close();
log.info(" 執行結果為: " + buffer.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
} finally {
if (null != sftp) {
sftp.quit();
}
closeSession();
}
return buffer.toString();
}
public static void closeSession() {
if (session != null) {
session.disconnect();
}
}
public static String getUUID() {
UUID uuid = UUID.randomUUID();
String str = uuid.toString();
return str.replace("-", "");
}
}