运行 通过 Java Runtime 或 ProcessBuilder 在同一个 Bash 上执行多个命令

Running Multiple commands on same Bash via Java Runtime or ProcessBuilder

我想要运行以下命令:-

# su - username
$ ssh-keygen -t rsa

enter 3 time to pass null to ssh-keygen options then

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
$ chmod 0600 ~/.ssh/authorized_keys
$ tar xzf tarpath
$ mv untaredfile ~/somename

在 shell 终端上但通过 Java 即我需要自动执行这些命令,其中用户名和 tarpath 将通过 gui 动态提供。 我尝试使用 java Runtime 执行它,但每次调用时都无法获得预期结果 Runtime.getRuntime().exec("somecommand"); 它会创建该命令的一个新实例,因此所有以前的命令都不存在 it.Like 切换到用户。 任何人都可以向我建议任何解决方案,无论是自定义 shell 脚本还是通过 ProcessBuilder。

传3次enterssh-keygen -t rsa,可以试试:

echo -e "\n\n\n" | ssh-keygen -t rsa

或使用以下命令来防止密码提示并将密钥对文件路径设置为默认路径:

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa 

要将多个命令合并为一个并以切换用户执行,您可以尝试su username -c或其他Shell语言:

su username -c 'ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa ; cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys'

要使用 Java 执行进程,您可以尝试使用 ProcessBuilder:

String username = "user";
String command = "ssh-keygen -t rsa -N \"\" -f ~/.ssh/id_rsa ; cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys";
ProcessBuilder processBuilder = new ProcessBuilder("su", username, "-c", command);
Process process = processBuilder.start();