我正在尝试使用Jsch将文件从远程服务器移动到另一台远程服务器。
我目前拥有连接到源远程服务器并创建到目标远程服务器的SSH隧道的代码。下面的代码
// First level target
String host = "sourceHost"
String user = "sourceUser"
String password = "sourcePassword"
// The host of the second target
String tunnelRemoteHost = "destinationHost"
String secondPassword = "sourcePassword"
int port=22;
JSch jsch=new JSch();
Session session=jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
// create port from 2233 on local system to port 22 on tunnelRemoteHost
session.setPortForwardingL(2233, tunnelRemoteHost, 22);
session.connect();
session.openChannel("direct-tcpip");
// create a session connected to port 2233 on the local host.
Session secondSession = jsch.getSession(user, "localhost", 2233);
secondSession.setPassword(secondPassword);
secondSession.setConfig("StrictHostKeyChecking", "no");
secondSession.connect(); // now we're connected to the secondary system
Channel channel=secondSession.openChannel("exec");
((ChannelExec)channel).setCommand("hostname");
channel.setInputStream(null);
try {
InputStream stdout = channel.getInputStream();
channel.connect();
while (true) {
byte[] tmpArray = new byte[1024];
while (stdout.available() > 0) {
int i = stdout.read(tmpArray, 0, 1024);
if (i < 0) break;
outputBuffer.append(new String(tmpArray, 0, i));
}
if (channel.isClosed()) {
System.out.println("exit-status: " + channel.getExitStatus());
break;
}
}
stdout.close();
我具有源服务器的文件路径和文件名,因此可以将文件传输到目标服务器。我应该只连接到源服务器并在第二台服务器上运行sftp命令,而不是隧道吗?还是我可以利用这个开放的隧道来传输文件?