【问题标题】:How to pass a password to Runtime.exec如何将密码传递给 Runtime.exec
【发布时间】:2013-06-23 21:00:24
【问题描述】:

我想下载svn数据,不幸的是它在svn+ssh url上,所以我必须总是输入密码。要通过一个程序调用获得所有版本,我想跳过密码输入。为此,我需要输入脚本的密码,所以至少我不能用一个简单的 shell 脚本来做到这一点,所以我尝试了 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 密码,这在我的情况下不起作用。有人知道如何解决这个问题?

最好的问候 达格雷

【问题讨论】:

  • 不能为SSH设置公钥认证?
  • --password 在什么意义上不起作用?

标签: java console passwords


【解决方案1】:

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

我认为你应该坚持使用--password它如何/为什么对你不起作用??),或者改用公钥身份验证。

【讨论】:

  • 感谢您的回答。我可以通过 SSH 登录(所以我可以使用 ssh username@server 而不需要输入密码),但是对于 svn,我必须输入两次密码,我不知道为什么。 --password 不起作用,因为它不会让我登录或更改任何内容 - 如果我使用 --password,我还必须输入密码。我现在的解决方法不是很好,但有效:我通过 java.awt.robot 输入所有内容,所以就好像用户会输入一些东西一样。这可能需要做更多的工作,但它做了它应该做的......
猜你喜欢
  • 2022-01-12
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多