你可以使用 JSch 库来实现在一台虚拟机上通过 Java 连接到远程虚拟机,将文件下载到本地虚拟机,计算其 MD5 值,然后返回。以下是一个简单的示例:
import com.jcraft.jsch.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.MessageDigest;
public class RemoteFileDownloadAndCalculateMD5 {
public static void main(String[] args) {
String remoteHost = "your-remote-host";
String remoteUser = "your-username";
String remoteFilePath = "/path/to/remote-file";
String localFilePath = "/path/to/local-file";
try {
JSch jsch = new JSch();
// 创建会话
Session session = jsch.getSession(remoteUser, remoteHost);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
// 创建SFTP通道
ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");
channel.connect();
// 下载远程文件到本地
channel.get(remoteFilePath, localFilePath);
// 计算本地文件的MD5值
String md5 = calculateFileMD5(localFilePath);
System.out.println("MD5: " + md5);
// 关闭SFTP通道和会话
channel.disconnect();
session.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String calculateFileMD5(String filePath) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
FileInputStream fis = new FileInputStream(new File(filePath));
byte[] buffer = new byte[1024];
int n;
while ((n = fis.read(buffer)) != -1) {
md.update(buffer, 0, n);
}
fis.close();
byte[] md5Bytes = md.digest();
StringBuilder sb = new StringBuilder();
for (byte md5Byte : md5Bytes) {
sb.append(Integer.toString((md5Byte & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
}
在这个示例中,我们连接到远程虚拟机,使用 SFTP 下载远程文件到本地,并计算文件的 MD5 值。确保替换示例中的主机名、用户名、远程文件路径和本地文件路径为你的实际值。