Java - команда ProcessBuilder rsync с паролем не работает

Я пытаюсь передать файл через 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]

Я могу подтвердить, что аргументы метода (например, пароль, имя пользователя, хост и т. Д.) Не равны нулю и действительны. Также я могу успешно запустить ту же команду rsync с помощью интерфейса командной строки.

Я обнаружил аналогичную проблему здесь и попробовал параметры 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?

заранее спасибо


person emrekgn    schedule 01.07.2016    source источник


Ответы (1)


Rsync не обрабатывает аутентификацию сам по себе, вместо этого это делает ssh-agent. Писать пароль для обработки выходного потока неверно: он не передает пароль ssh-agent. Вместо этого вы можете установить переменную среды RSYNC_PASSWORD=<password>.

person Sergei Voitovich    schedule 01.01.2017