如何将密码传递给Runtime.exec

时间:2013-06-26 15:54:23

标签: java console passwords

我想下载svn数据,不幸的是它是在svn + ssh网址上,所以我必须始终输入密码。要通过一个程序调用获取所有版本,我想跳过输入的密码。为此,我需要输入密码到skript,所以至少我不能用简单的shell skript来做,所以我尝试了Java。我实现写的方法如下:

 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,它只写在控制台上。有谁知道如何传递密码?

我总是搜索这个,但答案里面“也读了粗壮(我正在读它)或者通过--password给svn密码,这在我的情况下不起作用。有人知道如何解决这个问题?

最诚挚的问候 DaGeRe

1 个答案:

答案 0 :(得分:0)

svn命令直接打开与控制台的连接,以确保它正在与真实用户通话。这样做是为了保护用户,因为他/她已被欺骗通过一些偷偷摸摸的密码抓取器运行命令。 Java Process内容无法覆盖此机制,因为它直接发生在svn命令和操作系统之间。

我认为你应该坚持--password如何/为什么它不适合你?),或者转而使用公钥认证。