首页 > 系统相关 >Java使用Jsch执行Shell命令

Java使用Jsch执行Shell命令

时间:2023-08-27 10:34:41浏览次数:38  
标签:Jsch jsch Shell Java String session import null channel

JSch是SSH2的纯Java实现 。

JSch允许您连接到sshd服务器并使用端口转发,X11转发,文件传输等,您可以将其功能集成到您自己的Java程序中。JSch获得BSD格式许可证。

最初,我们开发这些东西的动机是允许我们的纯Java X服务器 WiredX的用户享受安全的X会话。所以,我们的努力主要是为了实现用于X11转发的SSH2协议。当然,我们现在也有兴趣添加端口转发,文件传输,终端仿真等其他功能。

官网上有很详细说明和例子:

官网:http://www.jcraft.com/jsch/

下面记两种执行命令的方式,仅作为备忘:

import com.jcraft.jsch.*;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

public class SSH {
    private static final String USER = "mengxin";
    private static final String PASSWORD = "*****";
    private static final String HOST = "172.16.0.128";
    private static final int DEFAULT_SSH_PORT = 22;

    public static void main(String[] arg) {
        Session session = null;
        Channel channel = null;
        try {
            JSch jsch = new JSch();
            session = jsch.getSession(USER, HOST, DEFAULT_SSH_PORT);
            session.setPassword(PASSWORD);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect(30000);   // making a connection with timeout.
            channel = session.openChannel("shell");
            channel.setInputStream(System.in);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            channel.setOutputStream(baos);
            channel.connect(3 * 1000);
            System.out.println(baos);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("finally...");
            if (channel != null) {
                channel.disconnect();
            }
            if (session != null) {
                session.disconnect();
            }
        }
    }
}

import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.TimeUnit;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class SSH {
    public static void main(String[] args) throws Exception{
        SSH sshUtil = new SSH("172.16.0.128", "mengxin", "******");

        String res = sshUtil.runShell("ip add\n", "utf-8");
        System.out.println(res);
        sshUtil.close();
    }
    private Channel channel;
    private Session session = null;
    private int timeout = 60000;

    public SSH(final String ipAddress, final String username, final String password) throws Exception {

        JSch jsch = new JSch();
        this.session = jsch.getSession(username, ipAddress, 22);
        this.session.setPassword(password);
        this.session.setConfig("StrictHostKeyChecking", "no");
        this.session.setTimeout(this.timeout);
        this.session.connect();
        this.channel = this.session.openChannel("shell");
        this.channel.connect(1000);
    }

    public String runShell(String cmd, String charset) throws Exception {
        String temp = null;

        InputStream instream = null;
        OutputStream outstream = null;
        try {
            instream = this.channel.getInputStream();
            outstream = this.channel.getOutputStream();
            outstream.write(cmd.getBytes(charset));
            outstream.flush();
            TimeUnit.SECONDS.sleep(2);
            if (instream.available() > 0) {
                byte[] data = new byte[instream.available()];
                int nLen = instream.read(data);

                if (nLen < 0) {
                    throw new Exception("network error...桌面有错误");
                }

                temp = new String(data, 0, nLen, "UTF-8");
            }
        }  finally {
            if (outstream != null) {
                outstream.close();
            }
            if (instream != null) {
                instream.close();
            }
        }
        return temp;
    }

    public void close() {
        this.channel.disconnect();
        this.session.disconnect();
    }
}

标签:Jsch,jsch,Shell,Java,String,session,import,null,channel
From: https://www.cnblogs.com/immengxin/p/17659934.html

相关文章

  • 使用 Java 生成二维码图片
    0x01准备(1)软件版本IntelliJIDEA2023.1.3JDK18Tomcat10.1.11Maven3.8.6(2)技术栈servletzxing谷歌项目生成黑白二维码并可以附上logoqrcodegithub开源项目基于并拓展zxing(3)创建项目创建空项目在菜单栏-文件-项目结构中设置JDK及语言级别......
  • JavaScript中的不可变原始值和可变对象引用
    在JavaScript中,原始值(undefined、null、布尔值、数字和字符串)与对象(包括数组和函数)之间存在着根本的区别。原始值是不可变的,意味着它们的值无法改变。这对于数字和布尔值很容易理解:修改它们的值是没有意义的。然而,对于字符串来说,这可能会稍微不太直观。由于字符串类似于字符数组,可......
  • Java实现数据导出到excel文件
    Java实现数据导出到excel文件使用的依赖:Apache提供的poi包首先导入依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>核心实现//创建一个工作簿,也就是Excel......
  • java中的图算法
    Java中有许多用于图算法的库和框架。下面是一些常见的图算法及其在Java中的实现方式:广度优先搜索(BFS):BFS用于在图中搜索最短路径。在Java中,可以使用LinkedList和HashSet来实现BFS算法。深度优先搜索(DFS):DFS用于在图中搜索路径或查找连通分量。在Java中,可以使用递归或栈来实现DFS算法......
  • Java实现数据导出到excel文件
    Java实现数据导出到excel文件使用的依赖:Apache提供的poi包首先导入依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>核心实现//创建一个工作簿,也就是Excel......
  • 基于JavaWeb的游戏信息管理系统设计与实现-计算机毕业设计源码
    摘要随着信息技术的发展,基于web模式的管理系统逐渐普及,网上查找信息是目前广受欢迎的模式。基于JavaWeb的游戏信息管理系统可以适应现代化快节奏的游戏方式,满足各类人群足不出户的在线查找游戏,利用基于JavaWeb的游戏信息管理系统可以获取游戏的排名信息,并可以记录个人的游戏数据,......
  • 基于Java的学生管理系统-计算机毕业设计源码+LW文档
    摘 要计算机信息技术的迅猛发展,改变了人们的生产生活方式。越来越多的教务管理使用管理系统进行管理,用来提高管理效率。在传统的教学管理中,往往通过大量的人力和物力进行管理,通过手工记录课程信息,统计科目资料。这种传统的管理方法容易出错,而且不能适应现代化、信息化的发展过程......
  • Java字符串替换
    JavaStringreplaceAll详解总结:Java编译期\为转义符,运行期正则表达式\为转义符,正则表达式匹配\需使用\\。replace为普通字符串替换,replaceAll为正则表达式替换(第一个参数为正则表达式,第二个参数中\为转义字符,$为正则字符),第二个参数表示\需使用\\。示例:替换字符串中的""......
  • Java实现数据导出到excel文件
    使用的依赖:Apache提供的poi包首先导入依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency> 核心实现//创建一个工作簿,也就是Excel文件HSSFWorkbookwb=n......
  • shell简明教程2退出状态和返回代码
    2退出状态和返回代码在本章中,您将学习如何确定给定命令的退出状态。还将学习如何在脚本中根据不同命令的退出状态做出决定。最后,还将学习如何在自己的脚本中使用退出状态。每次执行命令都会返回一个退出状态。退出状态有时也称为返回代码或退出代码,是范围从0到255的整数。按......