我正在尝试将文件从一台远程服务器复制到另一台远程服务器。我尝试使用scp。它通过腻子而不是通过代码复制文件。我目前正在使用echo复制文件。通过echo,我正在将字符串finalStr
写入abc.bcc,它的工作正常。但是在Jsch中使用下面的命令时,它不起作用。
scp /home/abc.bcc user@host:/folder1/folder2/abc.bcc
我尝试添加ssh公共私钥,但是没有运气。我尝试使用channel.setPty(true)
来避免提示密码,并通过bufferedWriter设置密码。但是仍然无法复制文件。请提出需要更改的内容。
JSch jsch = new JSch();
Session session;
try {
session = jsch.getSession("user", "host", 22);
session.setPassword("password");
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
logger.info("Connection status: " + session.isConnected());
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(
"echo \"" + finalStr + "\" >> /folder1/folder2/abc.bcc");
((ChannelExec) channel).setPty(false);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
OutputStream out = channel.getOutputStream();
channel.connect();
logger.info("Channel status : " + channel.isConnected());
out.write("\n".getBytes());
out.flush();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
int index = 0;
while ((line = br.readLine()) != null) {
logger.info(++index + " : " + line);
}
channel.disconnect();
session.disconnect();
}catch(....
调试输出:
debug1: Trying private key: /home/build_path/.ssh/id1
debug3: no such identity: /home/build_path/.ssh/id1: No such file or directory
debug1: Trying private key: /home/build_path/.ssh/id2
debug3: no such identity: /home/build_path/.ssh/id2: No such file or directory
debug1: Trying private key: /home/build_path/.ssh/id3
debug3: no such identity: /home/build_path/.ssh/id_3: No such file or directory
答案 0 :(得分:0)
日志看起来好像用户主目录设置不正确!因此找不到密钥文件!
一般方法:
我很确定一旦解决了这个问题,其他一切都会起作用。 当涉及代理时,这可能会变得相当复杂,因为代理设置必须在所有3台计算机之间正常工作。 我反复面对这些问题,可能会很混乱。