我正在尝试通过rsync传输文件。
这是我的代码:
ProcessBuilder builder = new ProcessBuilder("rsync", "-az", "-e", "ssh -q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no", username + "@" + host + ":" + filePath, destPath);
Process process = builder.start();
InputStream errorStream = process.getErrorStream();
// Password
OutputStream outputStream = process.getOutputStream();
outputStream.write(password.getBytes(StandardCharsets.UTF_8));
// Wait for execution
int exitValue = process.waitFor();
if (exitValue != 0) {
String errorMessage = read(errorStream);
System.out.println(errorMessage);
}
这是错误消息:
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.0]
我可以确认方法参数(例如密码,用户名,主机等)是非空且有效的。此外,我可以使用CLI成功运行相同的rsync命令。
我发现了一个类似的问题here并尝试了带或不带引号的SSH选项,但它没有用。
以下是运行程序时ps aux | grep rsync
的输出:
emre 8566 0.0 0.0 17396 908 ? S 18:15 0:00 rsync -az -e ssh -q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no user@XXXX:/tmp/dummy-file /tmp/
emre 8568 0.3 0.0 36148 3028 ? S 18:15 0:00 ssh -q -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oPubkeyAuthentication=no -l user XXXX rsync --server --sender -logDtprze.iLs . /tmp/dummy-file
我在这里缺少什么?这是使用ProcessBuilder
的正确方法吗?
提前致谢
答案 0 :(得分:0)
Rsync不会自己处理身份验证,而ssh-agent会这样做。
将密码写入进程输出流是错误的:它不会将密码传递给ssh-agent。相反,您可以设置环境变量RSYNC_PASSWORD=<password>
。