JAVA实现远程SSH登录服务器并执行命令
package com.cps.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import org.apache.commons.lang.StringUtils; //import org.apache.commons.lang.StringUtils; import ch.ethz.ssh2.Connection; import ch.ethz.ssh2.Session; import ch.ethz.ssh2.StreamGobbler; public class MainCommand { private static String DEFAULTCHART = "UTF-8"; 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("================登录成功=================="); return connection; } } catch (IOException e) { System.out.println("=========登录失败=========" + e); connection.close(); } 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(), DEFAULTCHART); System.out.println(result); // 如果为得到标准输出为空,说明脚本执行出错了 if (StringUtils.isBlank(result)) { System.out.println("得到标准输出为空,链接conn:" + connection + ",执行的命令:" + cmd); result = processStdout(session.getStderr(), DEFAULTCHART); } else { System.out.println("执行命令成功,链接conn:" + connection + ",执行的命令:" + cmd); } connection.close(); session.close(); } } catch (IOException e) { System.out.println("执行命令失败,链接conn:" + connection + ",执行的命令:" + cmd + " " + e); e.printStackTrace(); } return result; } /** * 解析脚本执行返回的结果集 * * @param in * 输入流对象 * @param charset * 编码 * @return 以纯文本的格式返回 */ private static String processStdout(InputStream in, String charset) { InputStream stdout = new StreamGobbler(in); 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"); System.out.println(line); } br.close(); } catch (UnsupportedEncodingException e) { System.out.println("解析脚本出错:" + e.getMessage()); e.printStackTrace(); } catch (IOException e) { System.out.println("解析脚本出错:" + e.getMessage()); e.printStackTrace(); } return buffer.toString(); } public static void main(String[] args) { long currentTimeMillis = System.currentTimeMillis(); String ip = "111.111.111.111";//change your ip String username = "root";//user String password = "****";//your server password String cmd = "sh /huase/basic/app.sh 1212"; //sh and your command Connection connection = login(ip, username, password); String execmd = execmd(connection, cmd); System.out.println("执行结果 "+execmd); long currentTimeMillis1 = System.currentTimeMillis(); System.out.println("ganymed-ssh2方式"+(currentTimeMillis1-currentTimeMillis)); } }
转载声明:本文为红盾科技技术分享平台的原创文章,转载请注明原文地址,谢谢合作
发表评论: