返回顶部
首页 > 资讯 > 服务器 >java如何调用远程服务器的shell脚本
  • 926
分享到

java如何调用远程服务器的shell脚本

2023-06-14 06:06:06 926人浏览 独家记忆
摘要

这篇文章给大家分享的是有关java如何调用远程服务器的shell脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。

这篇文章给大家分享的是有关java如何调用远程服务器shell脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。考虑再三,有两种实现方式:

方案一:脚本所在服务器安装一个客户端,也就是自己写的一个小程序,本地通过端口调目标服务器的程序,然后程序调本机上的shell脚本!

优点:通过端口调用,用户不用暴露服务器的账号密码,安全性高

缺点:我们需要一直维护这个客户端程序,而且每接入一台服务器,都得安装该客户端,另外非常考验客户端程序的健壮性。

方案二:本地直接通过IP,服务器账号密码调远程服务器的shell脚本

优点:代码易开发,扩展时只用扩展服务端代码即可

缺点:用户服务器的账号密码会暴露给服务端,密码安全问题

把每种方案的优缺点汇报给leader,leader说:按第二种来吧

来吧!!开干,废话不多说,直接上代码:

导入程序所需的软件包:

<dependency>   <groupId>org.jvnet.hudson</groupId>   <artifactId>ganymed-ssh3</artifactId>   <version>build210-hudson-1</version></dependency>

程序涉及的demo:

import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.NIO.charset.Charset; import org.apache.commons.io.IOUtils; import ch.ethz.ssh3.ChannelCondition;import ch.ethz.ssh3.Connection;import ch.ethz.ssh3.Session;import ch.ethz.ssh3.StreamGobbler; public class RemoteShellExecutor {    private Connection conn;      private String ip;      private String osUsername;      private String passWord;   private String charset = Charset.defaultCharset().toString();    private final String GET_SHELL_PID = "ps -ef | grep '%s' | grep -v grep |awk '{print $2}'";    private final String KILL_SHELL_PID = "kill -15 %s";    private static final int TIME_OUT = 1000 * 5 * 60;       public RemoteShellExecutor(String ip, String usr, String pasword) {     this.ip = ip;     this.osUsername = usr;     this.password = pasword;   }        private boolean login() throws IOException {     conn = new Connection(ip);     conn.connect();     return conn.authenticateWithPassword(osUsername, password);   }       public ExecuteResultVO exec(String cmds) throws Exception {     InputStream stdOut = null;      InputStream stdErr = null;     ExecuteResultVO executeResultVO = new ExecuteResultVO();     String outStr = "";     String outErr = "";     int ret = -1;     try {     if (login()) {       // Open a new {@link Session} on this connection       Session session = conn.openSession();       // Execute a command on the remote Machine.       session.execCommand(cmds);        stdOut = new StreamGobbler(session.getStdout());       outStr = processStream(stdOut, charset);        stdErr = new StreamGobbler(session.getStderr());       outErr = processStream(stdErr, charset);        session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);        System.out.println("outStr=" + outStr);       System.out.println("outErr=" + outErr);        ret = session.getExitStatus();       executeResultVO.setOutStr(outStr);      executeResultVO.setOutErr(outErr);           } else {       throw new Exception("登录远程机器失败" + ip); // 自定义异常类 实现略     }     } finally {       if (conn != null) {         conn.close();       }       IOUtils.closeQuietly(stdOut);       IOUtils.closeQuietly(stdErr);     }     return ret;   }       private String processStream(InputStream in, String charset) throws Exception {     byte[] buf = new byte[1024];     StringBuilder sb = new StringBuilder();     int len = 0;     while ((len=in.read(buf)) != -1) {       sb.append(new String(buf,0,len, charset));     }     return sb.toString();   }   public static void main(String args[]) throws Exception {    //调远程shell    RemoteShellExecutor executor = new RemoteShellExecutor("192.168.234.123", "root", "beebank");    System.out.println(executor.exec("sh /data/checkMysql.sh"));    //获取远程shell 进程 pid    ExecuteResultVO executeResultVO = executor.exec(String.fORMat(GET_SHELL_PID,"sh /data/checkMysql.sh"));    //杀掉shell进程    ExecuteResultVO executeResultVO1 = executor.exec(String.format(KILL_SHELL_PID ,executeResultVO.getOutStr()));   }   public class ExecuteResultVO<T>{    private String outStr;    private String outErr;     //省略get set }}

经过测试也确实好用啊,大家可以根据这个demo进行相应的修改。

感谢各位的阅读!关于“java如何调用远程服务器的shell脚本”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: java如何调用远程服务器的shell脚本

本文链接: https://lsjlt.com/news/268679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java如何调用远程服务器的shell脚本
    这篇文章给大家分享的是有关java如何调用远程服务器的shell脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。...
    99+
    2023-06-14
  • java怎么远程调用shell脚本
    在Java中,可以使用`Runtime`类或`ProcessBuilder`类来远程调用shell脚本。1. 使用`Runtime`...
    99+
    2023-10-11
    java shell
  • JAVA如何调用Shell脚本
    在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。JAVA...
    99+
    2023-05-31
    java shell脚本 ava
  • java调用远程服务器的shell脚本以及停止的方法实现
    最近接了个需求,要求远程调shell脚本,你没听错!!!需求就一句话,咱是谁,咱是优秀的开发选手。考虑再三,有两种实现方式: 方案一:脚本所在服务器安装一个客户端,也就是自己写的一个...
    99+
    2024-04-02
  • java如何调用shell脚本传参数
    在Java中调用Shell脚本并传递参数有多种方法,以下是其中一种常见的方法:1. 使用`java.lang.Runtime`类的`...
    99+
    2023-09-15
    java
  • shell中如何调用python脚本
    要在shell中调用Python脚本,可以使用以下命令:```python script.py```其中,`python`是Pyth...
    99+
    2023-10-10
    shell python
  • java中调用shell脚本的方法
    java中调用shell脚本的方法:1、在java项目中能够通过ProcessBuilder进行调度shell脚本,参数设置相对简单;2、还能够通过系统Runtime执行shell脚本,但在参数设置上需要添加空格将两个参数分开。具体内容如下...
    99+
    2024-04-02
  • 如何在Shell脚本中调用另一个脚本
    如何在Shell脚本中调用另一个脚本?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。假如有脚本 first.sh:#!/bin/bash#------------------...
    99+
    2023-06-09
  • 如何使用shell脚本实现连接并重启远程服务器
    这篇文章给大家分享的是有关如何使用shell脚本实现连接并重启远程服务器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。shell重启远程服务器#connServer.sh 登陆服务器脚本 本地...
    99+
    2023-06-09
  • Java如何调用JavaScript脚本
    今天小编给大家分享一下Java如何调用JavaScript脚本的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2024-04-02
  • java如何调用Groovy脚本
    目录一、使用二、实现原理三、调用groovy脚本实现方式1.使用GroovyClassLoader2.使用ScriptEngine3.使用GroovyShell四、性能优化五、解决方...
    99+
    2023-02-14
    java调用Groovy脚本 Groovy脚本调用 java Groovy脚本
  • 如何使用Java存储Shell脚本?
    Java作为一种广泛应用于企业级应用开发的编程语言,不仅可以实现业务逻辑,还可以辅助完成系统管理工作。本篇文章将介绍如何使用Java存储Shell脚本。 Shell脚本是一种文本文件,其中包含了一系列Shell命令和语句,用于在Unix或L...
    99+
    2023-10-17
    存储 shell apache
  • 如何使用shell脚本取出服务器图
    小编给大家分享一下如何使用shell脚本取出服务器图,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Shell 教程Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又...
    99+
    2023-06-09
  • shell脚本连接并重启远程服务器的方法
    shell重启远程服务器 #connServer.sh 登陆服务器脚本 本地文件 #!/usr/bin/expect expect -c " spawn ssh ali@192.168.1.1 expe...
    99+
    2022-06-04
    重启 脚本 服务器
  • Shell脚本中如何使用Java数组?
    在Shell脚本中使用Java数组是一个非常常见的需求。这是因为Java数组在存储大量数据时非常方便,而Shell脚本则常常需要处理大量数据。本文将介绍如何在Shell脚本中使用Java数组。 声明和初始化Java数组 在Java中声...
    99+
    2023-09-22
    数组 关键字 shell
  • 如何实现用Shell脚本搭建FTP服务器
    本篇内容介绍了“如何实现用Shell脚本搭建FTP服务器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!各种知识点都写在注释里。只需要 sud...
    99+
    2023-06-09
  • 如何在shell中循环调用hive sql 脚本
    本篇文章给大家分享的是有关如何在shell中循环调用hive sql 脚本,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。脚本tt.sh的内容如下:#!/bin/bashpara...
    99+
    2023-06-09
  • shell如何调用脚本将文件打包zip
    这篇文章给大家分享的是有关shell如何调用脚本将文件打包zip的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法如下:第一步,创建脚本:#!/bin/shCERT_DIR_ZIP=/data/cert/keys...
    99+
    2023-06-09
  • Shell脚本如何优雅地实现API调用?
    Shell脚本作为一种脚本语言,可以用来编写各种系统管理和自动化任务脚本。但是,Shell脚本如何优雅地实现API调用呢?本文将介绍一些Shell脚本实现API调用的方法,并结合实例进行演示。 使用curl命令进行API调用 curl...
    99+
    2023-09-26
    laravel shell api
  • Apache服务器上的Java存储:Shell脚本篇!
    在现代的应用程序中,Java是一种非常流行的编程语言。Java提供了一种简单而且高效的开发方式,使得它成为了很多企业级应用程序的首选语言。在这些应用程序中,存储是一个非常重要的问题。在本文中,我们将探讨如何在Apache服务器上使用Jav...
    99+
    2023-10-17
    存储 shell apache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作