zoukankan      html  css  js  c++  java
  • java远程调用linux的命令或者脚本

    转载自:http://eksliang.iteye.com/blog/2105862

     Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 

     使用步骤如下:

    一、导ganymed-ssh2-build210.jar包

    1
     
    1. <!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 -->
    2.  <dependency>
    3.  <groupId>ch.ethz.ganymed</groupId>
    4.  <artifactId>ganymed-ssh2</artifactId>
    5.  <version>build210</version>
    6.  </dependency>

    二、API说明

    1.  首先构造一个连接器,传入一个需要登陆的ip地址

    Connection conn = new Connection(hostname);

    2.  模拟登陆目的服务器 传入用户名和密码 

    1
     
    1. //它会返回一个布尔值,true 代表成功登陆目的服务器,否则登陆失败
    2. boolean isAuthenticated = conn.authenticateWithPassword(username, password);​

    3.  打开一个session,有点象hibernate的session ,执行你需要的Linux 脚本命令 。

    1
     
    1. Session sess = conn.openSession();
    2. sess.execCommand("last");​

    4. 接收目标服务器上的控制台返回结果,读取br中的内容

    1
     
    1. InputStream stdout =newStreamGobbler(sess.getStdout());
    2. BufferedReader br =newBufferedReader(newInputStreamReader(stdout));​

    5.得到脚本运行成功与否的标志 :0-成功 非0-失败

    1
     
    1. System.out.println("ExitCode: "+ sess.getExitStatus());​

    6.关闭session和connection

    1
     
    1.  sess.close();
    2.  conn.close();​

    备注:

    1.通过第2步认证成功后,当前目录就位于/home/username/目录之下,你可以指定脚本文件所在的绝对路径,或者通过cd导航到脚本文件所在的目录,然后传递执行脚本所需要的参数,完成脚本调用执行。

    2.执行脚本以后,可以获取脚本执行的结果文本,需要对这些文本进行正确编码后返回给客户端,避免乱码产生。

    3.如果你需要执行多个linux控制台脚本,比如第一个脚本的返回结果是第二个脚本的入参,你必须打开多个Session,也就是多次调用

    Session sess = conn.openSession();,使用完毕记得关闭就可以了

    三、实例代码,这个类可以直接拷贝过去用

     

     测试代码:

    1
     
    1.  publicstaticvoid main(String[] args){
    2. RemoteExecuteCommand rec=newRemoteExecuteCommand("192.168.168.200","root","123456");
    3. //执行命令
    4. System.out.println(rec.execute("ifconfig"));
    5. //执行脚本
    6. rec.execute("sh /usr/local/tomcat/bin/statup.sh");
    7. //这个方法与上面最大的区别就是,上面的方法,不管执行成功与否都返回,
    8. //这个方法呢,如果命令或者脚本执行错误将返回空字符串
    9. rec.executeSuccess("ifconfig");
    10. }

     需要导入的包:

    1
     
    1. <!-- https://mvnrepository.com/artifact/ch.ethz.ganymed/ganymed-ssh2 -->
    2. <dependency>
    3. <groupId>ch.ethz.ganymed</groupId>
    4. <artifactId>ganymed-ssh2</artifactId>
    5. <version>build210</version>
    6. </dependency>
    7.  
    8. <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    9. <dependency>
    10. <groupId>commons-io</groupId>
    11. <artifactId>commons-io</artifactId>
    12. <version>2.5</version>
    13. </dependency>
    14.  
    15. <dependency>
    16. <groupId>commons-lang</groupId>
    17. <artifactId>commons-lang</artifactId>
    18. <version>2.6</version>
    19. <type>jar</type>
    20. <scope>compile</scope>
    21. </dependency>
     

    如果是直接通过导jar包的,附百度云盘下载地址:链接:http://pan.baidu.com/s/1c2dr34 密码:g3l7

    四、注意事项

    执行命令的时候,比如:jps,Linux系统因为有环境变量,所以命令正确。但是如果是在java中远程调用Linux命令,

    那么必须使用绝对路径,如:/usr/local/java/jdk1.8/bin/jps

  • 相关阅读:
    BZOJ1040: [ZJOI2008]骑士
    Codeforces 849D.Rooter's Song
    POJ4852 Ants
    NOIP模拟赛 17.10.10
    Codeforces 851D Arpa and a list of numbers
    BZOJ2529: [Poi2011]Sticks
    BZOJ1826: [JSOI2010]缓存交换
    POJ3579 Median
    codevs1214 线段覆盖
    POJ2230 Watchcow
  • 原文地址:https://www.cnblogs.com/javalinux/p/15723039.html
Copyright © 2011-2022 走看看