从一台Linux机器上,我想在远程Linux机器上运行命令,如下所示:
ssh remote_user @ remote_server remote_command< local_script
这里remote_command是在远程计算机上运行的命令,local_script是本地计算机上的一个文件,其中包含要传递给remote_command的字符串。如果我在本地计算机上的命令行运行它,那么我可以验证该命令在远程计算机上具有正确的效果。但是,我需要使用ProcessBuilder在Java应用程序中运行它,如下所示:
processBuilder = new ProcessBuilder("ssh remote_user@remote_server remote_command < local_script");
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT);
process = processBuilder.start();
当我这样做时,我总是得到错误:
zsh:1:没有这样的文件或目录:local_script
我尝试了以下变体:
processBuilder = new ProcessBuilder("ssh", "remote_user@remote_server remote_command < local_script");
processBuilder = new ProcessBuilder("ssh", "remote_user@remote_server", "remote_command < local_script");
processBuilder = new ProcessBuilder("ssh", "remote_user@remote_server", "remote_command", "<", " local_script");
但似乎没有任何效果。我已经验证运行pwd给出了预期的目录,并且在使用ProcessBuilder运行时可以读取local_script(使用cat),所以我必须假设它与ssh命令的处理方式有关。有什么想法吗?
答案 0 :(得分:5)
您有3个选择: