2013-06-26 4 views
0

svn 데이터를 다운로드하고 싶습니다. 불행히도 svn + ssh url에 있으므로 암호를 항상 입력해야합니다. 하나의 프로그램 호출로 모든 버전을 얻으려면 암호 입력을 건너 뛰고 싶습니다. 이를 위해 필자는 skript에 암호를 입력해야하므로 적어도 간단한 쉘 스크립트로는이 작업을 수행 할 수 없으므로 Java를 시도했습니다. 내가 작성한 방법은 다음과 같습니다.Runtime.exec에 암호를 전달하는 방법

public static void main(String args[]) throws InterruptedException, 
     IOException { 
    String user = args[0]; 
    String passwd = args[1]; 

    String url = args[2]; 

    String command = "svn checkout svn+ssh://" + user + "@" + url; 

    Process p = Runtime.getRuntime().exec(command); 
    System.out.println("Start"); 
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
      p.getOutputStream())); 
    BufferedReader inp = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    BufferedReader stderr = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
    String line = ""; 
    System.out.println("Waiting..."); 
    while (line!=null) 
    { 
     Thread.sleep(100); 
     if (inp.ready()) 
     { 
      line = inp.readLine(); 
      System.out.println("Line: " + line); 
     } 
     if (stderr.ready()) 
     { 
      line = stderr.readLine(); 
      System.out.println("Line: " + line); 
     } 
    } 
    out.write(passwd + '\n'); 
    out.write(passwd + '\n'); 
    p.waitFor(); 
} 

불행히도 이것은 작동하지 않습니다. 나는 심지어 출력물에 Password-Enter-Thing을 얻지도 못했고 콘솔에만 쓰여졌다. 암호를 전달하는 방법을 아는 사람이 있습니까?

나는 항상 이것을 찾았지만, "멍청이도 읽으십시오 (이미 읽었습니다) 또는 svn에 --password를 통해 암호를 입력합니다. 내 경우에는 작동하지 않습니다. 이?

안부 DaGeRe

+0

SSH에 공개 키 인증을 설정할 수 없습니까? – Joni

+0

'--password'는 어떤 의미로 작동하지 않습니까? –

답변

0

svn 명령은 직접 실제 사용자에게 이야기하고 있는지 확인하기 위해 콘솔에 대한 연결을 여는를 해결합니다. 그것은이 경우에 사용자를 보호하기 위해 않습니다 그/그녀는 일부 부주의 한 암호 수집기를 통해 명령을 실행하는 속임수가 .Java Process 물건 직접이 일을 때문에이 메커니즘을 무시할 수 없습니다. svn 명령과 운영 체제 사이.

나는 --password (어떻게/왜 작동하지 않는가?) 또는 공개 키 인증을 사용하도록 전환해야한다고 생각합니다.

+0

답변 해 주셔서 감사합니다. 나는 SSH를 통해 로그인 할 수있다. (그래서 나는 beeing에 비밀번호를 물어 보지 않고 ssh username @ server를 사용할 수있다.)하지만 svn은 두 번 비밀번호를 입력해야한다. 왜 그런지 모르겠다. --password는 단지 나를 로그인하거나 아무것도 변경하지 않는다는 의미에서 작동하지 않습니다. --password를 사용하고 있다면 암호도 입력해야합니다. 내 해결 방법은 지금 좋지 않았지만 일했다 : java.awt.robot을 통해 모든 것을 입력하므로 마치 사용자가 무언가를 입력하는 것과 같다. 어쩌면 조금 더 많은 작업 일 수도 있지만 그것이해야 할 일은 ... –

관련 문제