美文网首页
java 远程linux主机执行命令

java 远程linux主机执行命令

作者: yinkp001 | 来源:发表于2019-08-16 14:15 被阅读0次

    说明:通过java登陆远程linux主机,执行linux命令。

    RmtShellExecutor.java

    import java.io.IOException;

    import java.io.InputStream;

    import java.nio.charset.Charset;

    import ch.ethz.ssh2.ChannelCondition;

    import ch.ethz.ssh2.Connection;

    import ch.ethz.ssh2.Session;

    import ch.ethz.ssh2.StreamGobbler;

    public class RmtShellExecutor {

        private Connection conn;

        private String ip;

        private  int port;

        private String usr;

        private String psword;

        private String charset = Charset.defaultCharset().toString();

        private static final int TIME_OUT = 1000 * 5 * 60;

        public RmtShellExecutor(String ip, int port,String usr, String ps) {

            this.ip = ip;

            this.port = port

            this.usr = usr;

            this.psword = ps;

        }

        private boolean login() throws IOException {

            conn = new Connection(ip,port);

            conn.connect();

            return conn.authenticateWithPassword(usr, psword);

        }

        public String exec(String cmds) throws IOException {

            InputStream stdOut = null;

            InputStream stdErr = null;

            String outStr = "";

            String outErr = "";

            int ret = -1;

            try {

                if (login()) {

                    Session session = conn.openSession();

                    session.execCommand(cmds);

                    stdOut = new StreamGobbler(session.getStdout());

                    outStr = processStream(stdOut, charset);

                  System.out.println("caijl:[INFO] outStr=" + outStr);

                    stdErr = new StreamGobbler(session.getStderr());

                    outErr = processStream(stdErr, charset);

                  System.out.println("caijl:[INFO] outErr=" + outErr);

                    session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);

                    ret = session.getExitStatus();

                } else {

                  System.out.println("caijl:[INFO] ssh2 login failure:" + ip);

                    throw new IOException("SSH2_ERR");

                }

            } finally {

                if (conn != null) {

                    conn.close();

                }

                if (stdOut != null)

                    stdOut.close();

                if (stdErr != null)

                    stdErr.close();

            }

            return outStr;

        }

        private String processStream(InputStream in, String charset) throws IOException {

            byte[] buf = new byte[1024];

            StringBuilder sb = new StringBuilder();

            while (in.read(buf) != -1) {

                sb.append(new String(buf, charset));

            }

            return sb.toString();

        }

        public static void main(String[] args) {

            String usr = "yinkp";

            String password = "yinkp";

            String serverIP = "10.1.236.145";

             int  sshPort = 22022

            RmtShellExecutor exe = new RmtShellExecutor(serverIP,sshPort, usr, password);

            String outInf;

            try {

                outInf =exe.exec("ls  ~/");

                System.out.println(outInf.toString());

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

    相关文章

      网友评论

          本文标题:java 远程linux主机执行命令

          本文链接:https://www.haomeiwen.com/subject/angfsctx.html