我见过很多JSch的例子,其中一个可以从本地复制到远程机器,反之亦然。如果我能够为两台远程计算机提供登录凭据,那么在JSch中是否可以从一台远程计算机复制到另一台远程计算机。
我尝试过以下代码
JSch jsch=new JSch();
Session session=jsch.getSession(user1, host1, 22);
// username and password will be given via UserInfo interface.
UserInfo ui=new MyUserInfo(password);
session.setUserInfo(ui);
session.connect();
Session remoteSession = jsch.getSession(user2, host2, 22);
UserInfo ui2 = new MyUserInfo(password2);
remoteSession.setUserInfo(ui2);
remoteSession.connect();
// exec 'scp -f rfile' remotely
String command="scp -f "+lfile;
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
Channel channel2=session.openChannel("exec");
((ChannelExec)channel2).setCommand(command);
// get I/O streams for remote scp
OutputStream out=channel.getOutputStream();
InputStream in=channel2.getInputStream();
channel.connect();
channel2.connect();
从输入流中读取后挂起。请让我知道如何实现远程到远程复制。
答案 0 :(得分:0)
关于我能想到实现这一目标的唯一方法是使用JSch发出原始SCP命令来执行从远程主机A到远程主机B的文件传输。为了做到这一点,你可能不得不在两台主机(A和B)之间设置公钥认证,因此在连接到远程主机B时不需要以交互方式提供密码。虽然我相信可以通过连接通道提供此密码,但我是只是不确定如何。