我正在尝试使用Java的Runtime.getRuntime().exec()来使用ssh-keygen Linux工具从私钥中提取公钥。
当我在终端上运行此命令时,它能够完美地工作,并且我能够从RSA私钥中提取公钥。
当我在终端上运行此命令时,它能够完美地工作,并且我能够从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
等命令时,shell会在运行程序之前执行重定向。JavaRuntime.exec()
不执行重定向。要么(1)从Process.getInputStream()
读取并自己写入文件;(2)使用ProcessBuilder
和.redirectOutput()
进行重定向;或者(3)使用.exec(String...)
重载来运行例如sh
与-c
一起作为单个参数的整个命令行,然后shell解析和处理它。 - dave_thompson_085