精华内容
下载资源
问答
  • 首先要引入依赖的Jar: jsch-0.1.55.jarmaven导入依赖的 jsch-0.1.55.jar包:com.jcraftjsch0.1.55非maven构建的...一、命令执行工具类ShellUtil.javapackage com.web.util;import com.jcraft.jsch.*;import java....

    首先要引入依赖的Jar:  jsch-0.1.55.jar

    maven导入依赖的 jsch-0.1.55.jar包:

    com.jcraft

    jsch

    0.1.55

    非maven构建的项目也可以直接去下载 :jsch-0.1.55.jar 导入即可。

    一、命令执行工具类

    ShellUtil.java

    package com.web.util;

    import com.jcraft.jsch.*;

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.util.*;

    import java.util.concurrent.ExecutorService;

    import java.util.concurrent.Executors;

    public class ShellUtil {

    private static final MapSHELL_SESSION_MAP = new HashMap<>();//sessionMap

    private static final JSch jsch = new JSch();//session构造器

    private static final Integer TIME_OUT_HOUR = 1;//超时时间

    private static final Integer DEFAULT_PORT = 22;//默认连接端口

    private static final String DEFAULT_CHANNEL_TYPE = "exec"; //默认类别

    private static ExecutorService executorQueue = Executors.newSingleThreadExecutor();

    public static void runExecute(Runnable paramRunnable) {

    executorQueue.submit(paramRunnable);

    }

    public static final String shellCommand(final String address, final String username, final String password, final String command) {

    return ShellUtil.shellCommand(address, username, password, ShellUtil.DEFAULT_CHANNEL_TYPE, command);

    }

    public static final String shellCommand(final String address, final String username, final String password,

    final String channelType, final String command) {

    return ShellUtil.shellCommand(address, username, password, ShellUtil.DEFAULT_PORT, channelType, command);

    }

    public static final String shellCommand(final String address, final String username, final String password,

    final Integer port, final String channelType, final String command) {

    if (!ShellUtil.checkNotNull(address, username, password, port, channelType, command))

    throw new NullPointerException("params cannot be null");

    if (!ShellUtil.SHELL_SESSION_MAP.containsKey(address + ":" + username))

    ShellUtil.SHELL_SESSION_MAP.put(address + ":" + username, new ShellUtil.ShellSession(address, username, password, port));

    ShellSession shellSession = ShellUtil.SHELL_SESSION_MAP.get(address + ":" + username);

    shellSession.updateLastExecTime();//更新操作时间

    //清除超时session实例

    ShellUtil.SHELL_SESSION_MAP.entrySet().removeIf(

    entry -> entry.getValue().lastExecTime.getTime() + ShellUtil.TIME_OUT_HOUR * 60 * 60 * 1000 < System.currentTimeMillis() );

    }

    return shellSession == null ? null : shellSession.execute(channelType, command);

    }

    private static final Boolean checkNotNull(Object... objects) {

    if (objects == null)

    return false;

    for (Object obj : objects) {

    if (obj == null)

    return false;

    }

    return true;

    }

    static class ShellSession {

    Session session;

    Date lastExecTime;

    private ShellSession(String address, String username, String password, Integer port) {

    try {

    session = ShellUtil.jsch.getSession(username, address, port);

    session.setPassword(password);

    session.setConfig("StrictHostKeyChecking", "no");//去掉连接确认的

    session.connect(30000);

    } catch (JSchException e) {

    e.printStackTrace();

    }

    }

    private void updateLastExecTime() {

    lastExecTime = Calendar.getInstance().getTime();

    }

    private String execute(String channelType, String command) {

    if (this.session == null)

    return null;

    Channel channel = null;

    //InputStream input = null;

    BufferedReader bufferedReader = null;

    String resp = "";

    try {

    channel = this.session.openChannel(channelType);

    ((ChannelExec) channel).setCommand(command);

    channel.setInputStream(null);

    ((ChannelExec) channel).setErrStream(System.err);

    channel.connect();

    bufferedReader = new BufferedReader(new InputStreamReader(channel.getInputStream()));

    String line = null;

    while ((line = bufferedReader.readLine()) != null) {

    resp += line + "\n";

    }

    if (resp != null && !resp.equals("")) {

    resp = resp.substring(0, resp.length() - 1);

    }

    System.out.println(resp);

    } catch (JSchException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    if (bufferedReader != null) {

    try {

    bufferedReader.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    if (channel != null) {

    channel.disconnect();

    }

    }

    return resp;

    }

    }

    }

    二、连接服务器,进入目录/home/geiri/deploy/portal/ ,显示当前目录下所有文件 :

    cacbf3231311f8dc26d2c5dff07413e5.png

    三、测试ShellUtil.java类

    d010fb8c591f59dd4b0ab7abee9da1b9.png

    执行结果:

    a0de2b9547abff233d0b048fbb0a0949.png

    展开全文
  • 1、使用jar包:jsch-0.1.24.jar2、代码示例import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import com.jcraft.jsch.ChannelExec;import ...

    1、使用jar包:jsch-0.1.24.jar

    2、代码示例

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import com.jcraft.jsch.ChannelExec;

    import com.jcraft.jsch.JSch;

    import com.jcraft.jsch.JSchException;

    import com.jcraft.jsch.Session;

    /**

    * SSH工具类

    */

    public class SSHTest {

    /**

    * 远程 执行命令并返回结果调用过程 是同步的(执行完才会返回)

    *

    * @param host

    * 主机名

    * @param user

    * 用户名

    * @param psw

    * 密码

    * @param port

    * 端口

    * @param command

    * 命令

    * @return

    */

    public static String exec(String host, String user, String psw, int port, String command) {

    String result = "";

    Session session = null;

    ChannelExec openChannel = null;

    try {

    // String osName = System.getProperty("os.name");

    // System.out.println("os name:"+osName);

    JSch jsch = new JSch();

    session = jsch.getSession(user, host, port);

    java.util.Properties config = new java.util.Properties();

    config.put("StrictHostKeyChecking", "no");

    session.setConfig(config);

    session.setPassword(psw);

    session.connect();

    openChannel = (ChannelExec) session.openChannel("exec");

    openChannel.setCommand(command);

    int exitStatus = openChannel.getExitStatus();

    // System.out.println(exitStatus);

    openChannel.connect();

    InputStream in = openChannel.getInputStream();

    BufferedReader reader = new BufferedReader(new InputStreamReader(in));

    String buf = null;

    while ((buf = reader.readLine()) != null) {

    result += new String(buf.getBytes("gbk"), "UTF-8") + " \r\n";

    }

    } catch (JSchException | IOException e) {

    result += e.getMessage();

    } finally {

    if (openChannel != null && !openChannel.isClosed()) {

    openChannel.disconnect();

    }

    if (session != null && session.isConnected()) {

    session.disconnect();

    }

    }

    return result;

    }

    public static void main(String args[]) {

    String memory = exec("192.168.0.135", "name", "pwd", 22, "free\n df -h\n top -b -n 1\n");// 内存

    // (命令\n分割,合起来写也ok)

    // String disk = exec("192.168.0.135", "name", "pwd", 22, "df -h\n");//

    // 磁盘

    // cpu

    // String cpu = exec("192.168.0.135", "name", "pwd", 22, "top -b -n

    // 1\n");// 直接写top输出为空,动态命令,只能加参数输出一次

    System.out.println(memory);

    // System.out.println(disk);

    // System.out.println(cpu);

    }

    }

    展开全文
  • // 创建JSch对象JSch jsch = new JSch();// 用户名String userName = "linux的用户名...// 服务器地址String host = "linux的ip地址";// 端口号int port = 22;// 要运行命令String cmd = "rm -rf -*";// 根据用户...

    // 创建JSch对象

    JSch jsch = new JSch();

    // 用户名

    String userName = "linux的用户名";

    // 密码

    String password = "linux的密码";

    // 服务器地址

    String host = "linux的ip地址";

    // 端口号

    int port = 22;

    // 要运行的命令

    String cmd = "rm -rf -*";

    // 根据用户名,主机ip,端口获取一个Session对象

    Session session = jsch.getSession(userName, host, port);

    // 设置密码

    session.setPassword(password);

    Properties config = new Properties();

    config.put("StrictHostKeyChecking", "no");

    // 为Session对象设置properties

    session.setConfig(config);

    int timeout = 60000000;

    // 设置timeout时间

    session.setTimeout(timeout);

    // 通过Session建立链接

    long start = System.currentTimeMillis();

    session.connect();

    ChannelExec channelExec = (ChannelExec) session.openChannel("exec");

    channelExec.connect();

    channelExec.setCommand(cmd);

    channelExec.setErrStream(System.err);

    channelExec.setInputStream(System.in);

    channelExec.setExtOutputStream(System.out);

    InputStream in = channelExec.getInputStream();

    BufferedReader reader = new BufferedReader(new InputStreamReader(in, Charset.forName("UTF-8")));

    String buf;

    StringBuffer sb = new StringBuffer();

    while ((buf = reader.readLine()) != null) {

    sb.append(buf);

    // 打印控制台输出

    System.out.println(buf);

    }

    long end = System.currentTimeMillis();

    System.out.println("共耗时:" + (end - start) / 1000 + "秒");

    reader.close();

    channelExec.disconnect();

    session.disconnect();

    展开全文
  • 本文描述两种方式使用java代码执行shell命令,首先使用Runtime类调用exce方法,其次使用ProcessBuilder实例实现更灵活的方式。1. 环境准备执行shell命令之前,我们需要获取jvm底层操作系统,同时定义通用消费流的类...

    本文描述两种方式使用java代码执行shell命令,首先使用Runtime类调用exce方法,其次使用ProcessBuilder实例实现更灵活的方式。

    1. 环境准备

    执行shell命令之前,我们需要获取jvm底层操作系统,同时定义通用消费流的类。

    1.1. 操作系统依赖

    在创建进场执行shell命令之前,我们需要获取jvm运行在具体哪个操作系统之上。因为Windows执行shell命令是cmd.exe,而其他操作系统发布标准shell是sh:

    boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");

    1.2. 输入和输出

    此外我们还需要一种方法来连接进程的输入、输出流。直到输出流被消费进程才会返回成功,否则会挂起。下面实现通用类StreamGobbler消费InputStream:

    private static class StreamGobbler implements Runnable {

    private InputStream inputStream;

    private Consumer consumer;

    public StreamGobbler(InputStream inputStream, Consumer consumer) {

    this.inputStream = inputStream;

    this.consumer = consumer;

    }

    @Override

    public void run() {

    new BufferedReader(new InputStreamReader(inputStream)).lines()

    .forEach(consumer);

    }

    }

    该类实现Runnable接口,意味着能够被任何Executor执行。

    2. Runtime.exec()执行

    Runtime.exec()方法是一种生成新子进程的简单方法,但不能定制。下面示例列出用户目录的目录清单并打印至控制台:

    String homeDirectory = System.getProperty("user.home");

    Process process;

    if (isWindows) {

    process = Runtime.getRuntime()

    .exec(String.format("cmd.exe /c dir %s", homeDirectory));

    } else {

    process = Runtime.getRuntime()

    .exec(String.format("sh -c ls %s", homeDirectory));

    }

    StreamGobbler streamGobbler =

    new StreamGobbler(process.getInputStream(), System.out::println);

    Executors.newSingleThreadExecutor().submit(streamGobbler);

    int exitCode = process.waitFor();

    assert exitCode == 0;

    3. ProcessBuilder执行

    第二种方法使用ProcessBuilder。这比Runtime方法更可取,因为能够定制一些细节。

    例如:

    改变正在运行Shell命令的工作目录,使用builder.directory()方法

    使用builder.environment()方法,设置自定义键值对作为环境变量

    重定向输入和输出流值自定义流

    使用build.inheritio()方法将它们都继承到当前JVM进程的流中

    ProcessBuilder builder = new ProcessBuilder();

    if (isWindows) {

    builder.command("cmd.exe", "/c", "dir");

    } else {

    builder.command("sh", "-c", "ls");

    }

    builder.directory(new File(System.getProperty("user.home")));

    Process process = builder.start();

    StreamGobbler streamGobbler =

    new StreamGobbler(process.getInputStream(), System.out::println);

    Executors.newSingleThreadExecutor().submit(streamGobbler);

    int exitCode = process.waitFor();

    assert exitCode == 0;

    4. 总结

    本文介绍了两种不同方法执行Shell命令。通常如果需要自定义派生流程的执行,例如更改其工作目录,则应考虑使用ProcessBuilder。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • JAVA中如何执行DOS命令

    2021-02-26 20:13:44
    JAVA中如何执行DOS命令如果要执行一条DOS内部命令,有两种方法。一种方法是把命令解释器包含在exec()的参数中。另一种方法是,把内部命令放在一个批命令my_dir.bat文件中,在Java程序 中写成exec("my_dir.bat")。...
  • java获取远程服务器硬件信息 内容精选换一换分析辅助软件是一款支持部署到多台服务器目标环境上,实现对整个业务集群的数据采集和优化的组件。已成功登录Java性能分析。待安装分析辅助软件的服务器已开启sshd。已...
  • 人为地去执行不同的命令查看服务器配置,必须熟悉系统指令的人员才方便查看,费时又费力,效率比较低下。所以,如果有方法能让使用者输入账号、密码、地址,就能查询到服务器信息的工具,那么非专业人员也能迅速获取...
  • 作为一个Java开发人员,有些常用的Linux命令必须掌握。即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服务器机器交互,就要通过shell命令。...
  • 问题描述工作中遇到这样一个问题,我们的应用为了实现高可用会采取双机部署,拓扑图大致如下:这种方案可以简单的保证高可用,即便应用服务器或者数据库服务器其中一台宕机,整个系统的功能还是不会受到影响,但是这里会...
  • 本文介绍如何获取远程服务器Java 进程的运行状态.启动 jstatd 服务在服务器端启动 jstatd 服务后, 远程的机器可以通过 rmi 协议获取服务器Java 程序的运行状态.在服务器上创建 jstatd 的授权文件, 假设文件...
  • java 获取远程服务器目录的路径 内容精选换一换已将所需升级的鲲鹏性能分析工具的软件包下载到本地。获取软件包后,需要校验软件包,确保与网站上的原始软件包一致,详细步骤请参见软件包校验。获取软件包后,需要...
  • java获取服务器目录

    2021-08-10 02:01:31
    java获取服务器目录 内容精选换...在服务器sample/mnist/路径创建mnist_data目录,然后切换到该目录执行如下命令获取数据以及标签文件。wget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-u本手册以sample包...
  • java获取服务器文件

    2021-08-10 05:50:48
    java获取服务器文件 内容精选换一换登录Windows操作系统的弹性云服务器时,需使用密码方式登录。因此,用户需先根据创建弹性云服务器时使用的密钥文件,获取该弹性云服务器初始安装时系统生成的管理员密码...
  • 不传参数,直接通过ServletRequestAttributes获取当前项目所在服务器的端口号和ip地址 public static String getUrl(){ ServletRequestAttributes requestAttributes = (ServletRequestAttributes) ...
  • 前提拿着命令行 再war所在的目录下执行是可以运行的 首先出现这个想到的是 1.怀疑服务器调用出现问题 那么测试服务器于生产服务器的代码是一直的将测试服务器的包拿到生产来 并且还原之前版本的包 都会出现问题。 2....
  • java构建ftp服务器

    2021-02-12 23:00:34
    [转:资源来自互联网,仅供分享]用Java构建稳定的Ftp服务器在www风行的今天,Ftp已经远不如...相比传统的C/C++,使用Java的多线程和网络编程能令我们更轻易地开发出稳定可靠的Ftp服务器。Ftp协议简介FileTransfer...
  • java 远程获取服务器信息 内容精选换一换已成功登录Java性能分析。待安装Guardian的服务器已...Java性能分析优先选用非交互shell(non-interactive shell)中的JAVA_HOME环境变量所指定的JRE版本运行Guardi使用MSTSC方...
  • java访问linux服务器读取文件路径 内容精选换一换通过...执行命令,从Host获取B.java,并将文件保存为A.java。adc --host xx.xx.xx.xx:22118 --get /tmp/A.java "~/ide_daemon/B.java"将xx.xx.xx.xx替换为实际的该任...
  • JAVA执行DOS命令分析

    2021-03-22 09:31:33
    下面是一种比较典型的程序模式:......在上面的程序中,第一行的“.\\p.exe”是要执行的程序 名,Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指 定...
  • java 读取linux服务器上文件 内容精选换一换目的调整系统配置选项,充分发挥系统硬件性能。调整系统配置选项,充分发挥系统硬件性能。方法具体优化项详见表1。OS配置参数参数名称参数含义优化建议配置方法vm....
  • 导读在一行中运行两个或多个命令可以节省大量时间,并在Linux中提高效率。在Linux中,有三种方法可以在一行中运行多个命令:;Command 1 ; Command 2 首先运行Command1,然后运行Command2&&Command 1 &&...
  • java获取远程服务器的文件夹 内容精选换一换已成功登录Java性能分析。...Java性能分析优先选用非交互shell(non-interactive shell)中的JAVA_HOME环境变量所指定的JRE版本运行Guardi已成功登录Ja...
  • java程序中如何调用linux命令作为一个Java开发人员,有些常用的Linux命令必须掌握。即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令。因为很多服务器上都是Linux系统。所以,要和服务器...
  • java读取远程服务器文件 内容精选换一换已成功登录Java性能分析。待安装Guardian的服务器...Java性能分析优先选用非交互shell(non-interactive shell)中的JAVA_HOME环境变量所指定的JRE版本运行Guardi已成功登录Java...
  • 背景:项目需求,只要在页面上贴上maven依赖的地址,就能直接下载依赖例如...在windows上也可以使用这条命令)注意:需要先安装maven,并且配置环境...
  • java读取远程服务器文件是否存在 内容精选换一换已成功登录Java性能分析。...Java性能分析优先选用非交互shell(non-interactive shell)中的JAVA_HOME环境变量所指定的JRE版本运行Guardi已成功登录...
  • java查询linux服务器负载 内容精选换一换本章节以Linux操作系统为例,指导您通过负载均衡地址的方式连接GaussDB(for Influx)实例。目标实例必须与弹性云服务器在同一个虚拟私有云和子网内才能访问。该弹性云服务器...
  • Print a Binary Tree in Vertical Orderhttp://... import java.util. ...Java中this关键字的几种用法1 . 当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中的...
  • Java自带命令详解

    千次阅读 2021-02-12 11:12:23
    1. 背景给一个系统定位问题的时候,知识、经验是关键基础,数据(运行日志、异常堆栈、GC日志、线程快照[threaddump / javacore文件]、堆转储快照[heapdump / hprof])是依据,工具是运用知识处理数据的手段。...
  • java执行linux命令cd

    2021-05-15 06:11:02
    java执行linux命令cd[2021-01-31 01:51:23]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 228,266
精华内容 91,306
关键字:

java执行当前服务器命令

java 订阅