Команда ssh-keygen в Java для извлечения открытого ключа из закрытого ключа

Я пытаюсь использовать Java Runtime.getRuntime(). Exec() для извлечения открытого ключа из закрытого ключа с помощью утилиты ssh-keygen linux.

Когда я запускаю эту команду на терминале, она работает безупречно, и я могу извлечь открытый ключ из закрытого ключа RSA

ssh-keygen -y -f /home/useraccount/private.txt > /home/useraccount/public.txt

Но когда я запускаю ту же команду, используя Java, она не создает файл public.txt. Это тоже не выдает никакой ошибки.

Process p = Runtime.getRuntime().exec("ssh-keygen -y -f /home/useraccount/private.txt > /home/useraccount/public.txt");
p.waitFor();

Мне интересно, почему это?

1 ответ

Решение

Не совсем ответ, потому что у меня нет времени на тестирование, но есть основные варианты:

// example code with no exception handling; add as needed for your program

String cmd = "ssh-keygen -y -f privatefile";
File out = new File ("publicfile"); // only for first two methods

//// use the stream ////
Process p = Runtime.exec (cmd);
Files.copy (p.getInputStream(), out.toPath());
p.waitFor(); // just cleanup, since EOF on the stream means the subprocess is done

//// use redirection ////
ProcessBuilder b = new ProcessBuilder (cmd.split(" "));
b.redirectOutput (out);
Process p = b.start(); p.waitFor();

//// use shell ////
Process p = Runtime.exec ("sh", "-c", cmd + " > publicfile");
// all POSIX systems should have an available shell named sh but 
// if not specify an exact name or path and change the -c if needed 
p.waitFor(); 
Другие вопросы по тегам