Java SSH 客戶端 如何刪除 linux 機器上的 檔案

gongchengship發表於2024-07-04

在 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 機器,並執行刪除檔案等操作。

相關文章