• 注册
当前位置:1313e > java >正文

java调用远程服务器shell脚本

1.代码

代码比较简单

package com.springboot.information.utils;import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;import org.apache.commons.io.IOUtils;import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;public class RemoteShellExecutor {private Connection conn;/** 远程机器IP */private String ip;/** 用户名 */private String osUsername;/** 密码 */private String password;private String charset = Charset.defaultCharset().toString();private static final int TIME_OUT = 1000 * 5 * 60;/*** 构造函数* @param ip* @param usr* @param pasword*/public RemoteShellExecutor(String ip, String usr, String pasword) {this.ip = ip;this.osUsername = usr;this.password = pasword;}/*** 登录* @return* @throws IOException*/private boolean login() throws IOException {conn = new Connection(ip);conn.connect();return conn.authenticateWithPassword(osUsername, password);}/*** 执行脚本** @param cmds* @return* @throws Exception*/public int exec(String cmds) throws Exception {InputStream stdOut = null;InputStream stdErr = null;String outStr = "";String outErr = "";int ret = -1;try {if (login()) {System.out.println("login success");// Open a new {@link Session} on this connectionSession session = conn.openSession();// Execute a command on the remote machine.System.out.println("session success");session.execCommand(cmds);System.out.println("exec:"+cmds);System.out.println("session:"+session);stdOut = new StreamGobbler(session.getStdout());System.out.println("stdOut:"+stdOut.toString());outStr = processStream(stdOut, charset);System.out.println("stdOut");stdErr = new StreamGobbler(session.getStderr());outErr = processStream(stdErr, charset);System.out.println("stdErr");session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);System.out.println("outStr=" + outStr);System.out.println("outErr=" + outErr);ret = session.getExitStatus();} else {throw new Exception("登录远程机器失败" + ip); // 自定义异常类 实现略}} finally {if (conn != null) {conn.close();}IOUtils.closeQuietly(stdOut);IOUtils.closeQuietly(stdErr);}return ret;}/*** @param in* @param charset* @return* @throws IOException* @throws UnsupportedEncodingException*/private String processStream(InputStream in, String charset) throws Exception {System.out.println("ininin");byte[] buf = new byte[1024];StringBuilder sb = new StringBuilder();int num =0;while (in.read(buf) != -1) {num++;System.out.println("number:"+num);sb.append(new String(buf, charset));System.out.println("sb:"+sb.toString());System.out.println("buf:"+in.read(buf));}System.out.println("enene22");return sb.toString();}public static void main(String args[]) throws Exception {RemoteShellExecutor executor = new RemoteShellExecutor("XXXX", "XX", "XXX");// 执行myTest.sh 参数为java Know dummySystem.out.println(executor.exec("/home/zh/Documents/start/note.sh"));}
}
复制代码

转载于:https://juejin.im/post/5d072f08518825092c7171d5

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录
相关推荐