首页 > 系统相关 >Java SSH 客户端 如何删除 linux 机器上的 文件

Java SSH 客户端 如何删除 linux 机器上的 文件

时间:2024-07-04 19:57:57浏览次数:20  
标签:JSch jsch Java String channelExec session SSH linux new

在 Java 中,可以使用 SSH 客户端库如 JSch(Java Secure Channel)来连接到远程 Linux 机器并执行命令,包括删除文件。下面是一个使用 JSch 库的示例,展示如何通过 SSH 删除远程 Linux 机器上的文件。

步骤:

  1. 添加 JSch 库
    确保您的项目包含 JSch 库。如果您使用的是 Maven,可以在 pom.xml 中添加以下依赖项:

    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.55</version>
    </dependency>
    
  2. 编写 Java 代码
    使用 JSch 库连接到远程 Linux 机器,并执行删除文件的命令。

以下是一个完整的示例代码:

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

import java.io.InputStream;

public class SSHDeleteFileExample {
    public static void main(String[] args) {
        String host = "remote_host";
        String user = "username";
        String password = "password";
        String command = "rm /path/to/your/file.txt";

        try {
            // 创建 JSch 对象
            JSch jsch = new JSch();

            // 获取 session 对象
            Session session = jsch.getSession(user, host, 22);
            session.setPassword(password);

            // 设置配置以跳过主机键检查
            java.util.Properties config = new java.util.Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);

            // 连接到服务器
            session.connect();

            // 打开执行通道
            ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
            channelExec.setCommand(command);

            // 获取命令的输入流
            InputStream in = channelExec.getInputStream();
            channelExec.connect();

            // 读取命令执行结果
            byte[] tmp = new byte[1024];
            while (true) {
                while (in.available() > 0) {
                    int i = in.read(tmp, 0, 1024);
                    if (i < 0) break;
                    System.out.print(new String(tmp, 0, i));
                }
                if (channelExec.isClosed()) {
                    if (in.available() > 0) continue;
                    System.out.println("Exit-status: " + channelExec.getExitStatus());
                    break;
                }
                try {
                    Thread.sleep(1000);
                } catch (Exception ee) {
                    ee.printStackTrace();
                }
            }

            // 断开通道和 session
            channelExec.disconnect();
            session.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

解释:

  1. 创建 JSch 对象

    JSch jsch = new JSch();
    
  2. 获取 session 对象

    Session session = jsch.getSession(user, host, 22);
    session.setPassword(password);
    
  3. 配置 SSH session
    为了跳过主机键检查,设置 StrictHostKeyCheckingno。在生产环境中,这可能需要根据具体情况进行调整。

    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    
  4. 连接到服务器

    session.connect();
    
  5. 打开执行通道并设置命令

    ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
    channelExec.setCommand(command);
    
  6. 执行命令并读取结果
    打开通道,执行命令,并通过输入流读取命令执行的结果。

    channelExec.connect();
    InputStream in = channelExec.getInputStream();
    byte[] tmp = new byte[1024];
    while (true) {
        while (in.available() > 0) {
            int i = in.read(tmp, 0, 1024);
            if (i < 0) break;
            System.out.print(new String(tmp, 0, i));
        }
        if (channelExec.isClosed()) {
            if (in.available() > 0) continue;
            System.out.println("Exit-status: " + channelExec.getExitStatus());
            break;
        }
        try {
            Thread.sleep(1000);
        } catch (Exception ee) {
            ee.printStackTrace();
        }
    }
    
  7. 断开连接

    channelExec.disconnect();
    session.disconnect();
    

通过这种方式,您可以使用 Java 程序通过 SSH 连接到远程 Linux 机器,并执行删除文件等操作。

标签:JSch,jsch,Java,String,channelExec,session,SSH,linux,new
From: https://www.cnblogs.com/gongchengship/p/18284568

相关文章

  • Java28-反射
    目录概述学习反射到底学什么获取字节码文件对象的三种方式字节码文件和字节码文件对象获取构造方法获取构造方法并创建对象获取成员变量获取成员变量并获取值和修改值获取成员方法获取成员方法并运行练习泛型擦除修改字符串的内容反射和配置文件结合动态获取利......
  • Java 中Json中既有对象又有数组的参数 如何转化成对象
    1.示例一:解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象在Java中处理JSON数据,尤其是当JSON结构中既包含对象又包含数组时,常用的库有org.json、Gson和Jackson。这里我将以Gson为例来展示如何解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象。首先......
  • Java for循环倒序输出
    1.实现一个for循环的倒序输出在Java中,要实现一个for循环的倒序输出,通常我们会使用数组或集合(如ArrayList)作为数据源,然后通过倒序遍历这个数组或集合来实现。下面,我将给出一个详细的示例,使用数组作为数据源,通过for循环倒序输出数组中的元素。这个示例不仅可以直接运行,而且具有一定......
  • 欧拉 EulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。
    欧拉EulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。EulerOSEulerOS是华为基于CentOS源代码,面向企业应用环境开发的一个商用Linux发行版。EulerOS开发者华为技术有限公司作業系統家族Unix ,Linux,CentOS運作狀態活跃源码模式开源软件当前版本2.......
  • 【如何判断动作事件是否由按钮引发】基于Java-GUI
    在刚刚写GUI的时候,我突然想到怎样去判断某一个事件源是由哪一个监听器响应的,所以我来整理后编写这次总结。(❁´◡`❁)❤当然首先得需要有一个按钮对象♥JButtonbt=newJButton();//创建按钮对象╰(*°▽°*)╯♥这里存在俩种情况♥如果按钮创建和判断方法在一......
  • Java中的JSON神器,如何轻松玩转复杂数据结构
    哈喽,大家好,我是木头左!一、揭秘JSON世界的基石在Java的世界中,JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于文本,易于阅读和编写,同时也易于机器解析和生成。JSON在日常开发中的应用非常广泛,无论是前后端的数据交互,还是配置文件的读取,都离不开JSON的身影。那......
  • Linux网络服务面试题
    1、查看一个网络接口的方法有哪些?  ①查看目录/etc/sysconfig/network-scripts/下的网卡对应的配置文件ifcfg-ens33  ②ifconfigens332、如何给一个网络接口设置多个IP地址?  临时配置:ifconfigens33:1IP地址netmask掩码 up  永久配置:在网卡配置文件目录......
  • Java基础:线程的三种创建方式
    一、继承Thread类定义一个类继承线程类Thread重写run()方法创建线程对象调用线程对象的start()方法创建线程Thread类的常用APIsetName(Stringname):给线程取名字getName():获取线程的名字publicstaticThreadcurrentThread():获取当前线程对象,这个代码在哪个线程中就获......
  • CenterOS7安装java
    CenterOS7安装java#进入安装目录cd/usr/local/soft/java#wget下载java8#直接进入官网选择相应的版本进行下载,然后把下载链接复制下来就可以下载了#不时间的下载链接不一样wgethttp://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/......
  • linux设置环境变量
    linux设置环境变量直接使用目录设置环境变量编辑环境变量文件vim/etc/profile在最下一行添加如下文件:exportPATH=$PATH:/usr/local/consul设置配置立即生效,否则需要重启后生效source/etc/profile使用类似于JAVA_HOME编辑编辑环境变量文件vim/etc/profile......