import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* 登錄ssh
* @param ip
* @param username
* @param password
* @return
*/
public static Connection login(String ip, String username, String password) {
boolean flag = false;
Connection connection = null;
try {
connection = new Connection(ip);
connection.connect();// 連接
flag = connection.authenticateWithPassword(username, password);// 認證
if (flag) {
System.out.println("================" + ip + " 登錄成功==================");
return connection;
}
} catch (Exception e) {
log.info("=========登錄失敗=========" + e);
if (connection != null)
connection.close();
connection = null;
}
return connection;
}
/**
* 遠程執行shll腳本或者命令
*
* @param cmd 即將執行的命令
* @return 命令執行完后返回的結果值
*/
public static String execmd(Connection connection, String cmd) {
String result = "";
try {
if (connection != null) {
Session session = connection.openSession();// 打開一個會話
session.execCommand(cmd);// 執行命令
result = processStdout(session.getStdout());
System.out.println(result);
// 如果為得到標准輸出為空,說明腳本執行出錯了
/* if (!StringUtils.isEmpty(result)) {
System.out.println("得到標准輸出為空,鏈接conn:" + connection + ",執行的命令:" + cmd);
result = processStdout(session.getStderr(), DEFAULTCHART);
} else {
System.out.println("執行命令成功,鏈接conn:" + connection + ",執行的命令:" + cmd);
}*/
/*connection.close();
session.close();*/
}
} catch (Exception e) {
log.info("執行命令失敗,鏈接conn:" + connection + ",執行的命令:" + cmd + " " + e);
// e.printStackTrace();
}
return result;
}
/**
* 解析腳本執行返回的結果集
*
* @param in 輸入流對象
* @return 以純文本的格式返回
*/
private static String processStdout(InputStream in) {
InputStream stdout = new StreamGobbler(in);
StringBuffer buffer = new StringBuffer();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(stdout, StandardCharsets.UTF_8));
String line = null;
while ((line = br.readLine()) != null) {
buffer.append(line).append("\n");
// System.out.println(line);
}
br.close();
} catch (IOException e) {
log.info("解析腳本出錯:" + e.getMessage());
// e.printStackTrace();
}
return buffer.toString();
}