Я пытаюсь использовать Runtime.getRuntime() .exe() .exe() .exe() для . открытый ключ из частного ключа с помощью утилиты ssh-keygen linux.Команда ssh-keygen в Java для извлечения открытого ключа из закрытого ключа
Когда я запускаю эту команду на терминале, он работает безупречно, и я в состоянии извлечь открытый ключ из 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();
Мне интересно, почему это так?
При вводе команды с '> file' и т.д. _to в shell_, оболочка делает перенаправление перед запуском программа. Java 'Runtime.exec()' не выполняет перенаправление. Либо (1) читайте из 'Process.getInputStream()' и пишите в файл самостоятельно; (2) используйте 'ProcessBuilder' с' .redirectOutput() 'для выполнения перенаправления; или (3) использовать '.exec (String ...)' перегрузку для запуска, например. 'sh' с' -c' и (как единственный аргумент!) всю командную строку, которую оболочка затем анализирует и обрабатывает. –
Можете ли вы поделиться образцом? – sunny