2013-06-26 113 views
0

我想下載svn數據,不幸的是它在svn + ssh url上,所以我必須始終輸入密碼。要通過一個程序調用獲取所有版本,我想跳過輸入的密碼。爲此,我需要爲skript輸入密碼,所以至少我不能用簡單的shell 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密碼,這在我的情況不起作用。有沒有人知道如何要解決這個問題?

問候 DaGeRe

+0

您無法爲SSH設置公鑰認證? – Joni

+0

「--password」在什麼意義上不起作用? –

回答

0

svn命令打開控制檯連接,直接以確保它正在向真正的用戶,它這樣做是爲了保護用戶的情況下他/她已經被欺騙性地通過一些偷偷摸摸的密碼採集器來運行命令.Java Process東西不能重寫這個機制,因爲它直接發生在svn命令和操作系統之間。

我認爲你應該堅持--password如何/爲什麼不能爲你工作?),或切換到使用公鑰認證。

+0

感謝您的答案。我可以通過SSH登錄(所以我可以使用ssh username @ server而不需要求密碼),但對於svn,我必須輸入密碼兩次,我不知道爲什麼。 --password不起作用,它只是不會登錄或更改任何內容 - 如果我使用--password,則還必須輸入密碼。我的解決方法現在不是很好,但工作:我通過java.awt.robot輸入所有內容,因此就好像用戶輸入內容一樣。這可能是更多的工作,但它應該做什麼... –

相關問題