代码之家  ›  专栏  ›  技术社区  ›  HyperioN

使用sshpass将ssh连接到远程主机,并使用java获取结果

  •  0
  • HyperioN  · 技术社区  · 7 年前

    我试图在远程机器上运行一些命令,并使用Java捕获结果。我有一个shell脚本,名为test。具有以下命令的sh:

    sshpass -p 'password' ssh root@host.com echo hostname
    

    我使用以下java代码运行它:

    public void runCommand() throws IOException, InterruptedException {
    
        ProcessBuilder builder = new ProcessBuilder();
        boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows");
        if (isWindows) {
            builder.command("cmd.exe", "/c", "dir");
        } else {
            builder.command("sh", "-c", "sh test.sh");
        }
        builder.directory(new File(System.getProperty("user.home")));
        Process process;
        BufferedReader reader = null;
        try {
            process = builder.start();
            reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            StringBuilder stringBuilder = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
            }
            String output = stringBuilder.toString();
            System.out.println(output);
        } finally
    
        {
            if (reader != null)
                try {
                    reader.close();
                } catch (IOException e) {
                }
        }
    }
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Hugues M.    7 年前

    启动时 Process 在Java中,您 avoid blocking 应该 ProcessBuilder .

    在这种情况下,您完全忽略命令的错误输出。您说过您的进程以状态代码127退出,因此它可能会打印在stderr上,因此您可以使用 ProcessBuilder.redirectErrorStream(true) .

    $PATH 用于java进程。