Ich versuche, eine Datei über Rsync zu übertragen.Java - ProcessBuilder rsync Befehl mit Passwort schlägt fehl
Hier ist mein Code-Schnipsel:
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);
}
und dies ist die Fehlermeldung:
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: unexplained error (code 255) at io.c(226) [Receiver=3.1.0]
I Methodenargumente bestätigen können (wie Passwort, Benutzername, Host usw.) sind nicht-null und gültig. Außerdem kann ich den gleichen rsync-Befehl mit der CLI erfolgreich ausführen.
Ich habe ein ähnliches Problem here gefunden und versuchte SSH-Optionen mit oder ohne Anführungszeichen, aber es hat nicht funktioniert.
Hier ist die Ausgabe von ps aux | grep rsync
wird, während der Ausführung des Programms:
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 [email protected]:/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
Was ich hier fehlt? Ist das der richtige Weg, ProcessBuilder
zu verwenden?
Vielen Dank im Voraus