Java SSH 客户端 如何删除 linux 机器上的 文件
在 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 机器,并执行删除文件等操作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了