我想运行以下命令: -
# su - username
$ ssh-keygen -t rsa
输入3次将null传递给ssh-keygen选项,然后
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys
$ tar xzf tarpath
$ mv untaredfile ~/somename
在shell终端上但是通过Java,我需要自动执行这些命令,其中将通过gui动态提供用户名和tarpath。
我尝试用java Runtime执行它,但每次调用时都无法获得预期的结果
Runtime.getRuntime().exec("somecommand");
它创建了该命令的新实例,因此所有先前的命令都不存在。就像切换到用户一样。
任何人都可以建议我任何解决方案自定义shell脚本或通过ProcessBuilder。
答案 0 :(得分:0)
要为enter
传递3次ssh-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();