javassh远程服务器并执⾏多条shell命令
java ssh远程服务器并执⾏多条命令
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Calendar;
import org.apachemons.lang3.StringUtils;
hz.ssh2.Connection;
hz.ssh2.Session;
hz.ssh2.StreamGobbler;
public class SshUtil {
private static String DEFAULT_CHAR_SET = "UTF-8";
private static String tipStr = "=======================%s=======================";
private static String splitStr = "=====================================================";
/**
* 登录主机
* @return
*  登录成功返回true,否则返回false
*/
public static Connection login(String ip, String userName, String password){
boolean isAuthenticated = false;
Connection conn = null;
long startTime = Instance().getTimeInMillis();
try {
conn = new Connection(ip);
isAuthenticated = conn.authenticateWithPassword(userName, password); // 认证
if(isAuthenticated){
System.out.println(String.format(tipStr, "认证成功"));
} else {
System.out.println(String.format(tipStr, "认证失败"));
}
} catch (IOException e) {
e.printStackTrace();
}
long endTime = Instance().getTimeInMillis();
System.out.println("登录⽤时: " + (endTime - startTime)/1000.0 + "s\n" + splitStr);
return conn;
}
/**
* 远程执⾏shell脚本或者命令
* @param cmd
*  即将执⾏的命令
* @return
*  命令执⾏完后返回的结果值
*/
public static String execute(Connection conn, String cmd){
String result = "";
Session session = null;
try {
if(conn != null){
session = conn.openSession(); // 打开⼀个会话
result = Stdout(), DEFAULT_CHAR_SET);
//如果为得到标准输出为空,说明脚本执⾏出错了
if(StringUtils.isBlank(result)){
result = Stderr(), DEFAULT_CHAR_SET);
}else{
System.out.println("【执⾏命令成功】\n执⾏的命令如下:\n" + cmd);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.close();
}
if (session != null) {
session.close();
}
}
return result;
}
/**
* 解析脚本执⾏返回的结果集
* @param in 输⼊流对象
* @param charset 编码
* @return
*  以纯⽂本的格式返回
*/
private static String processStdout(InputStream in, String charset){
InputStream stdout = new StreamGobbler(in);shell脚本返回执行结果
StringBuffer buffer = new StringBuffer();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(stdout, charset));            String line = null;
while((line = br.readLine()) != null){
buffer.append(line + "\n");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String();
}
public static void main(String[] args){
String ip = "192.168.56.88"; // 此处根据实际情况,换成⾃⼰需要访问的主机IP
String userName = "root";
String password = "111111";
Connection conn = SshUtil.login(ip, userName, password);
//多条命令可以⽤&&分割
//String cmd = "cd /home/&&pwd&&ls";
String result = ute(conn, cmd);
System.out.println(splitStr + "\n执⾏的结果如下: \n" + result + splitStr);
}
}
需要的maven依赖
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<!-- ssh -->
<dependency>
<groupId&hz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>262</version>
</dependency>