java 远程linux主机执行命令

2019-08-16  本文已影响0人  yinkp001

说明:通过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();

        }

    }

}

上一篇下一篇

猜你喜欢

热点阅读