【问题标题】:How can I execute Linux commands on a remote machine using Java?如何使用 Java 在远程机器上执行 Linux 命令?
【发布时间】:2011-12-18 11:58:50
【问题描述】:

我有两台安全的 linux 服务器。在一台机器上,我的 Java 应用程序正在运行。我需要在 Java 中的第一台机器上在第二台机器上运行 Linux 命令。我该怎么做?

【问题讨论】:

标签: java linux ssh


【解决方案1】:

Jsch (here) 允许您使用 SSH 连接到远程服务器并轻松执行 shell 命令(以及许多其他东西,如 SCP、SFTP ......)。文档不多,但您有一些非常有用的实现示例here(甚至还有一个您想要做什么的示例here)。

您还可以将 Jsch 与 Expect4j 结合使用,这样可以更好地控制您要执行的命令(很好的示例 here)。

【讨论】:

    【解决方案2】:

    本质上,您需要从 Java 应用程序中打开与其他服务器的 ssh 连接。 OpenSSH 站点提供了一些有用的库信息,这些信息将为您提供 Java 中的 ssh 支持。

    看起来Ganymed SSH-2 for Java 是最好的选择,但我没有使用过任何一个,所以你需要看看你需要什么。

    一旦您建立了 ssh 连接,您就可以像使用任何其他 ssh 客户端登录一样运行命令。

    【讨论】:

      【解决方案3】:

      您可以通过多种方式做到这一点;但是,几乎所有方式都涉及网络连接。

      您可以编写客户端-服务器对 Java 程序,客户端连接到服务器并提交命令。

      您可以编写 Java 以使用现有服务器,例如 sshd、telnetd、rsh、ftpd,或允许在远程端执行命令的预先存在的其他服务器。

      您可以利用一种架构来处理建立客户端-服务器对的某些方面,例如 RMI、SOAP、CORBA 等。

      最终,Java 支持大量的网络选项,因此您可以使用比您想象的更多的方式来实现这一点。只需确保您不要在 Web 浏览器中执行此操作,因为这些 JVM 是在沙盒中启动的,如果没有一些帮助,您将无法离开沙盒。

      【讨论】:

        【解决方案4】:

        检查 Sockets 可能更容易,因为您可以做您想做的事情,而无需设置任何外部库。

        在主机上,您要设置一个 ServerSocket 对象,然后从客户端计算机上打开一个 Socket。我没有时间输入一个完整的示例,但请查看这个以通过 Java 建立 Internet 上的服务器-主机连接的简单方法。

        http://zerioh.tripod.com/ressources/sockets.html

        一旦你设置好了,你想从应该执行命令的计算机上的 ServerSocket 输入你的 shell 命令,并围绕行做一些事情

        String command = "get this from the ObjectInputStream attached to your ServerSocket";
        Runtime run = Runtime.getRuntime();
        Process pr = run.exec(command) ;
        pr.waitFor() ;
        BufferedReader buffer = new BufferedReader( new InputStreamReader( pr.getInputStream() ) ) ;
        String line;
        while ( ( line = buffer.readLine() ) != null ) 
        {
        System.out.println(line);
        }
        

        棘手的部分是用套接字建立一个可靠的主机-客户端连接,但如果你做一些简单的事情,你应该可以使用上面链接中的示例。

        【讨论】:

        • 当您可以使用 ssh 时,您真的想重新发明轮子并重做所有工作以确保连接安全吗?
        • 我将该问题误读为对 Java 实现的请求。感谢您指出。
        猜你喜欢
        • 2012-09-14
        • 2015-01-19
        • 2017-11-24
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多