要在 Windows 本地将文件移动到远程 Linux 虚拟机上的对应目录,然后删除本地文件,可以使用 SSH 密钥认证方式进行操作。以下是使用 Java 来实现的示例代码:
-
准备密钥对:
首先,您需要生成一对 SSH 密钥,一把是私钥(留在本地),一把是公钥(添加到远程 Linux 虚拟机的
~/.ssh/authorized_keys
文件中)。您可以使用工具如ssh-keygen
来生成密钥对。 -
在 Java 项目中引入 SSH 库:
在您的 Java 项目中,您需要使用 SSH 库来执行远程操作。常用的 Java SSH 库包括 JSch 和 Apache SSHD 等。您可以使用 Maven 或 Gradle 将这些库添加到您的项目中。
例如,如果您使用 Maven,可以在
pom.xml
文件中添加以下依赖项来引入 JSch 库:xml
<dependencies>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version> <!-- 根据最新版本进行更新 -->
</dependency>
</dependencies> -
编写 Java 代码:
在 Java 代码中,您需要执行以下操作:
- 使用 SSH 密钥认证方式连接到远程 Linux 虚拟机。
- 执行远程命令来创建目标目录。
- 使用 SCP(Secure Copy Protocol)将文件从本地复制到远程虚拟机。
- 删除本地文件。
以下是一个示例 Java 代码的框架,用于执行此操作:
javaCopy code
import com.jcraft.jsch.*;
public class SecureFileTransfer {
public static void main(String[] args) {
String localFilePath = "E:\\yourfile.txt"; // 本地文件路径
String remoteFilePath = "/path/to/remote/directory/"; // 远程目录路径
String remoteHost = "your-remote-host"; // 远程主机地址
int remotePort = 22; // SSH 端口号
String remoteUsername = "your-username"; // 远程用户名
String privateKeyPath = "C:\\path\\to\\private_key"; // 本地私钥文件路径try {
JSch jsch = new JSch();
jsch.addIdentity(privateKeyPath); // 添加私钥文件Session session = jsch.getSession(remoteUsername, remoteHost, remotePort);
// 设置 StrictHostKeyChecking 为 no,以避免询问 HostKey
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);session.connect();
// 创建远程目录
ChannelExec channelExec = (ChannelExec) session.openChannel("exec");
String createDirectoryCommand = "mkdir -p " + remoteFilePath;
channelExec.setCommand(createDirectoryCommand);
channelExec.connect();
channelExec.disconnect();// 使用 SCP 将文件从本地复制到远程目录
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp channelSftp = (ChannelSftp) channel;// 将本地文件上传到远程目录
channelSftp.put(localFilePath, remoteFilePath);// 删除本地文件
java.io.File localFile = new java.io.File(localFilePath);
if (localFile.exists()) {
localFile.delete();
}channelSftp.disconnect();
session.disconnect();
} catch (JSchException | SftpException | Exception e) {
e.printStackTrace();
}
}
}
请替换示例中的占位符(如
yourfile.txt
、/path/to/remote/directory/
、your-remote-host
、your-username
和C:\\path\\to\\private_key
)为您实际使用的值。 -
运行 Java 代码:
编译并运行上述 Java 代码。它将连接到远程 Linux 虚拟机,创建目标目录,使用 SCP 将文件从本地复制到远程虚拟机,