在 Java 中,可以使用 SSH 客戶端庫如 JSch(Java Secure Channel)來連線到遠端 Linux 機器並執行命令,包括刪除檔案。下面是一個使用 JSch 庫的示例,展示如何透過 SSH 刪除遠端 Linux 機器上的檔案。
步驟:
-
新增 JSch 庫:
確保您的專案包含 JSch 庫。如果您使用的是 Maven,可以在pom.xml
中新增以下依賴項:<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency>
-
編寫 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();
}
}
}
解釋:
-
建立 JSch 物件:
JSch jsch = new JSch();
-
獲取 session 物件:
Session session = jsch.getSession(user, host, 22); session.setPassword(password);
-
配置 SSH session:
為了跳過主機鍵檢查,設定StrictHostKeyChecking
為no
。在生產環境中,這可能需要根據具體情況進行調整。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);
-
執行命令並讀取結果:
開啟通道,執行命令,並透過輸入流讀取命令執行的結果。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(); } }
-
斷開連線:
channelExec.disconnect(); session.disconnect();
透過這種方式,您可以使用 Java 程式透過 SSH 連線到遠端 Linux 機器,並執行刪除檔案等操作。