zoukankan      html  css  js  c++  java
  • 利用java实现可远程执行linux命令的小工具

    在linux的脚本中,如果不对机器做其他的处理,不能实现在linux的机器上执行命令。为了解决这个问题,写了个小工具来解决这个问题。

    后面的代码是利用java实现的可远程执行linux命令的小工具,代码中使用了jsch这个开源包。

    JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。jsch的jar,可从官网下载。

      1 import java.io.IOException;
      2 import java.io.InputStream;
      3 import java.util.Properties;
      4 
      5 import com.jcraft.jsch.Channel;
      6 import com.jcraft.jsch.ChannelExec;
      7 import com.jcraft.jsch.JSch;
      8 import com.jcraft.jsch.JSchException;
      9 import com.jcraft.jsch.Session;
     10 
     11 /**
     12  * 
     13  * 类似ssh执行命令的小工具
     14  * 
     15  * @author walker
     16  * 
     17  */
     18 public class SSH {
     19     private String userName;
     20     private String password;
     21     private String host;
     22 
     23     public SSH(String host, String userName, String password) {
     24         this.host = host;
     25         this.userName = userName;
     26         this.password = password;
     27     }
     28 
     29     private Session getSession() {
     30         JSch jsch = new JSch();
     31         Session session = null;
     32 
     33         try {
     34             session = jsch.getSession(userName, host);
     35             session.setPassword(password);
     36 
     37             Properties props = new Properties();
     38             props.put("StrictHostKeyChecking", "no");
     39             session.setConfig(props);
     40             session.connect();
     41         } catch (JSchException e) {
     42             e.printStackTrace();
     43         }
     44         return session;
     45     }
     46 
     47     public boolean exec(String[] cmds) {
     48         StringBuffer cmdBuffer = new StringBuffer();
     49 
     50         for (int i = 0; i < cmds.length; i++) {
     51             if (i != 3) {
     52                 cmdBuffer.append(" ");
     53             }
     54             cmdBuffer.append(cmds[i]);
     55         }
     56         return exec(cmdBuffer.toString());
     57     }
     58 
     59     public boolean exec(String cmd) {
     60         Session session = getSession();
     61         Channel channel = null;
     62         InputStream in = null;
     63         try {
     64             channel = session.openChannel("exec");
     65             ((ChannelExec) channel).setCommand(cmd);
     66             ((ChannelExec) channel).setInputStream(null);
     67             ((ChannelExec) channel).setErrStream(System.err); // 获取执行错误的信息
     68 
     69             in = channel.getInputStream();
     70             channel.connect();
     71             byte[] b = new byte[1024];
     72             int size = -1;
     73             while ((size = in.read()) > -1) {
     74                 System.out.print(new String(b, 0, size)); // 打印执行命令的所返回的信息
     75             }
     76             return true;
     77         } catch (Exception e) {
     78             e.printStackTrace();
     79         } finally {
     80             // 关闭流
     81             if (in != null) {
     82                 try {
     83                     in.close();
     84                 } catch (IOException e) {
     85                 }
     86             }
     87             // 关闭连接
     88             channel.disconnect();
     89             session.disconnect();
     90         }
     91 
     92         return false;
     93     }
     94 
     95     /**
     96      * @param args
     97      */
     98     public static void main(String[] args) {
     99         if (args.length < 4) {
    100             System.err.println("usage:
    	" + SSH.class.getName()
    101                     + " <host> <usename> <password> <cmds>");
    102             System.exit(1);
    103         }
    104 
    105         // 用以保存命令(可能是一串很长的命令)
    106         StringBuffer cmdBuffer = new StringBuffer();
    107         for (int i = 3; i < args.length; i++) {
    108             if (i != 3) {
    109                 cmdBuffer.append(" ");
    110             }
    111             cmdBuffer.append(args[i]);
    112         }
    113 
    114         SSH ssh = new SSH(args[0], args[1], args[2]);
    115         System.exit(ssh.exec(cmdBuffer.toString()) ? 0 : 1);
    116     }
    117 }
  • 相关阅读:
    一个有趣的js现象
    根相对路径的简单例子
    几道简单有趣的js题(一)
    js流程控制题——如何实现一个LazyMan
    HTML5 十大新特性(十)——Web Socket
    HTML5 十大新特性(九)——Web Storage
    HTML5 十大新特性(八)——Web Worker
    HTML5 十大新特性(七)——拖放API
    HTML5 十大新特性(六)——地理定位
    HTML5 十大新特性(五)——SVG绘图
  • 原文地址:https://www.cnblogs.com/lgfeng/p/3255535.html
Copyright © 2011-2022 走看看