要使用Java通过SSH密钥连接到远程服务器上的两台虚拟机,创建文件、写入内容、计算MD5,并保存MD5值,你可以使用Java SSH库,比如JSch。下面是一个示例代码,演示了如何执行这些操作:
首先,你需要添加 JSch 库的依赖。可以使用 Maven 或 Gradle 来引入 JSch。
Maven 依赖:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version> <!-- 请使用最新的版本 -->
</dependency>
Gradle 依赖:
implementation group: 'com.jcraft', name: 'jsch', version: '0.1.55' // 请使用最新的版本
接下来,可以使用以下 Java 代码来实现你的需求:
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class SSHFileOperation {
public static void main(String[] args) {
try {
JSch jsch = new JSch();
// 远程虚拟机1的SSH连接信息
String username1 = "your_username1";
String host1 = "remote_host1";
int port1 = 22;
String privateKey1 = "/path/to/your/ssh_key1"; // 本地SSH私钥文件路径
// 远程虚拟机2的SSH连接信息
String username2 = "your_username2";
String host2 = "remote_host2";
int port2 = 22;
String privateKey2 = "/path/to/your/ssh_key2"; // 本地SSH私钥文件路径
// 创建会话
Session session1 = createSession(jsch, username1, host1, port1, privateKey1);
Session session2 = createSession(jsch, username2, host2, port2, privateKey2);
// 在两台虚拟机上创建文件,写入内容,计算MD5
createFileAndCalculateMD5(session1, "/path/to/remote/file1.txt", "Content for File 1");
createFileAndCalculateMD5(session2, "/path/to/remote/file2.txt", "Content for File 2");
// 关闭会话
session1.disconnect();
session2.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
// 创建SSH会话
private static Session createSession(JSch jsch, String username, String host, int port, String privateKey) throws JSchException {
jsch.addIdentity(privateKey);
Session session = jsch.getSession(username, host, port);
session.setConfig("StrictHostKeyChecking", "no"); // 忽略主机密钥检查
session.connect();
return session;
}
// 在远程服务器上创建文件,写入内容,计算MD5
private static void createFileAndCalculateMD5(Session session, String remoteFilePath, String content) throws Exception {
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand("echo '" + content + "' > " + remoteFilePath);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
byte[] tmp = new byte[1024];
while (true) {
while (in.available() > 0) {
int i = in.read(tmp, 0, 1024);
if (i < 0) {
break;
}
}
if (channel.isClosed()) {
if (in.available() > 0) {
continue;
}
break;
}
}
channel.disconnect();
}
}
请替换示例中的 SSH 连接信息、文件路径和内容。这段代码会在两台虚拟机上创建文件、写入内容,并计算文件的 MD5 值。这是一个基本示例,你可以根据实际需求进行修改和扩展。确保替换为你自己的 SSH 密钥文件和远程虚拟机信息。