在一台虚拟机用java连接远程虚拟机登录远程虚拟机进入对应的的目录下,把当前目录下的一个文件复制到 本地虚拟机的一个路径下然后把这个文件MD5一下,把MD5的值返回 不要用channel.get(re

如果你不想使用 channel.get 方法来复制文件,你可以尝试使用 SSH 连接远程虚拟机后,使用 Java 进行文件复制和计算 MD5 的操作。下面是一个示例代码:

import com.jcraft.jsch.*;

import java.io.*;
import java.security.MessageDigest;

public class SSHFileTransfer {
    public static void main(String[] args) {
        String host = "your-remote-host";
        String user = "your-username";
        String password = "your-password";
        String remoteFilePath = "path-to-remote-file";
        String localFilePath = "path-to-local-file";

        try {
            JSch jsch = new JSch();
            Session session = jsch.getSession(user, host);
            session.setPassword(password);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();

            ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
            sftpChannel.connect();

            // 下载文件到本地
            InputStream in = sftpChannel.get(remoteFilePath);
            OutputStream out = new FileOutputStream(localFilePath);

            byte[] buffer = new byte[1024];
            int len;
            while ((len = in.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }

            in.close();
            out.close();

            // 计算 MD5
            String md5 = calculateMD5(localFilePath);
            System.out.println("MD5: " + md5);

            sftpChannel.disconnect();
            session.disconnect();
        } catch (JSchException | SftpException | IOException e) {
            e.printStackTrace();
        }
    }

    public static String calculateMD5(String filePath) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            FileInputStream fis = new FileInputStream(filePath);
            byte[] dataBytes = new byte[1024];

            int nread;
            while ((nread = fis.read(dataBytes)) != -1) {
                md.update(dataBytes, 0, nread);
            }

            byte[] mdBytes = md.digest();

            StringBuilder md5 = new StringBuilder();
            for (byte mdByte : mdBytes) {
                md5.append(Integer.toString((mdByte & 0xff) + 0x100, 16).substring(1));
            }

            return md5.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

请替换示例中的 your-remote-hostyour-usernameyour-passwordpath-to-remote-filepath-to-local-file 为实际的值。这个示例会连接到远程虚拟机,下载文件到本地并计算 MD5 值。需要注意的是,这个示例使用用户名和密码进行认证,不推荐在生产环境中使用明文密码。最佳实践是使用密钥认证来提高安全性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值