2016-07-01 2 views
0

rsync를 통해 파일을 전송하려고합니다. 여기 Java - 암호가있는 ProcessBuilder 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); 
} 

이 오류 메시지입니다 : I (예 등 암호, 사용자 이름, 호스트로) 메소드의 인수를 확인 null이 아닐 수

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 옵션을 따옴표와 함께 사용하거나 사용하지 않으려 고 시도했지만 작동하지 않았습니다.

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 

내가 여기 실종 무엇 : 여기

프로그램을 ps aux | grep rsync의 출력을 실행하는 동안? 이 방법이 ProcessBuilder을 사용하는 올바른 방법입니까? 사전

답변

0

에 Rsync에

덕분에 자체적으로 인증을 처리하지 않습니다, SSH 에이전트 대신에이 작업을 수행합니다. 출력 스트림을 처리 할 때 암호를 쓰는 것이 잘못되었습니다 : 암호를 ssh-agent에 전달하지 않습니다. 대신 환경 변수 RSYNC_PASSWORD=<password>을 설정할 수 있습니다.

관련 문제