【问题标题】:ssh to remote host using sshpass and fetch results using java使用 sshpass ssh 到远程主机并使用 java 获取结果
【发布时间】:2017-07-13 19:18:18
【问题描述】:

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

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) {
            }
    }
}

命令执行,但我没有在输出中得到任何东西。如果我使用像 echo、hostname 这样的简单命令,那么我可以在输出中得到结果。我知道JSch可以解决这个问题,但是我不能用。

【问题讨论】:

  • 也许 yiu 遇到了一些异常并且不记录它们?
  • @telex 如果我从终端运行,脚本运行没有任何问题
  • 它没有回答我的问题。
  • 如何查看是否有异常?
  • 现在您完全忽略命令的错误输出。您可以使用ProcessBuilder.redirectErrorStream 获取有关错误的更多详细信息。可能sshpass 未安装,或者安装但未在$PATH 中为您的java 进程。

标签: java linux sshpass


【解决方案1】:

在 Java 中启动 Process 时,您必须将 stdout 和 stderr 都消耗到 avoid blocking,并且您应该记录或控制两者(避免消耗到-丢弃)。现在有比链接文章提到的更简单的解决方案,使用ProcessBuilder

在这种情况下,您完全忽略了命令的错误输出。您说您的进程以状态码 127 退出,因此它可能会打印在 stderr 上,因此您将使用ProcessBuilder.redirectErrorStream(true) 获得有关该错误的更多详细信息。

可能 sshpass 未安装,或者安装但未在您的 java 进程的 $PATH 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多