java远程连接服务器并执行命令

需求:本地连接服务器,把服务器上tomcat日志的最新500行代码拷贝到txt文件中,方便后续下载。

借鉴了网上的资源:https://my.oschina.net/u/4313515/blog/4187192/print

需要的依赖:

     
            ch.ethz.ganymed
            ganymed-ssh2
            262
        

代码:

  public static void main(String[] args) {
        //服务器的IP地址
        String hostname = "192.168.10.68";
        int port = 22;
        String username = "root";
        String password = "123456";
        //指明连接主机的IP地址
        Connection conn = new Connection(hostname, port);
        Session ssh = null;
        try {
            //连接到主机
            conn.connect();
            //使用用户名和密码校验
            boolean isconn = conn.authenticateWithPassword(username, password);
            if (!isconn) {
                System.out.println("用户名称或者是密码不正确");
            } else {
                System.out.println("已经连接到" + hostname);

                //以下是linux的示例
                //将本地conf/server_start.sh传输到远程主机的/opt/pg944/目录下
//                SCPClient clt = conn.createSCPClient();
//                clt.put("conf/server_start.sh", "/opt/pg944/");

                //执行命令
                //ssh.execCommand("perl /root/hello.pl");
                //只允许使用一行命令,即ssh对象只能使用一次execCommand这个方法,多次使用则会出现异常.
                //使用多个命令用分号隔开
                //ssh.execCommand("cd /root; sh hello.sh");
                //将Terminal屏幕上的文字全部打印出来
                ssh = conn.openSession();
                //下面是构造要执行的命令:把远程服务器上的tomcat日志的最新500行导出,以便后面下载
                Date time = new Date();
                DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
                String name = "tomcatLog"+df.format(time)+".log";
                ssh.execCommand("cd /usr/local/tomcat8/logs;touch "+name+";tail -500 catalina.out > "+name);
                InputStream is = new StreamGobbler(ssh.getStdout());
                BufferedReader brs = new BufferedReader(new InputStreamReader(is));
                while (true) {
                    String line = brs.readLine();
                    if (line == null) {
                        break;
                    }
                    System.out.println(line);
                }
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        } finally {
            //连接的Session和Connection对象都需要关闭
            if (ssh != null) {
                ssh.close();
            }
            if (conn != null) {
                conn.close();
            }
        }
    }

 

你可能感兴趣的:(java)