【问题标题】:Run a script from another machine using Java使用 Java 从另一台机器运行脚本
【发布时间】:2013-12-18 00:36:38
【问题描述】:

我在同一个网络中有 3 台计算机。我想编写一个 java 程序以便在其他机器上运行一些脚本。我的机器运行 Windows,其他机器分别运行 Linux 和 Windows。

有什么想法吗?我展示了一些关于远程机器的解决方案,但我希望会有更简单的方法,因为我的电脑在同一个网络中。

【问题讨论】:

  • 您的意思是要使用 Java 程序触发这些脚本吗?这个触发器是手动的吗?我的意思是,你打算设置一个 cron 或调度程序来触发它吗?
  • 它是一个手动的......我想运行java程序,点击go,一切都会开始

标签: java network-programming remote-desktop


【解决方案1】:

对于 linux 你可以使用 ssh 来执行远程命令

【讨论】:

  • 你能举个例子吗?我需要在远程机器上安装任何东西吗?
  • @Nidis - 远程机器需要安装 SSH 软件。它适用于 windows 和 linux。在 linux 的情况下,它几乎肯定已经安装了。
【解决方案2】:

除了@corsair 的回复:Linux 可以使用 SSH,Linux 和 windows 都可以使用 Telnet。 有几个实现 SSH 和 Telnet 的纯 Java 库。看看http://www.jcraft.com/jsch/http://commons.apache.org/net/

【讨论】:

  • 我在使用 Windows 时遇到问题,因为他们拒绝 ssh 和 telnet 连接。
  • Windows 有替代方案 - PowerShell。也许这可以帮助Running Remote Commands
【解决方案3】:
  1. 在每台机器上创建一个 serverSocket 或 RMI / XMLRPC 服务器。

    ServerSocket serverSocket = new ServerSocket(1234);

    当(真){

    try {
        Socket socket = serverSocket.accept();
        BufferedReader reader = new BufferedReader(socket.getInputStream());
        // exec a command sent by the client
        Runtime.getRuntime().exec(reader.readLine());
        // or 
        // a static command
    } catch (Exception ex) {
    }
    

    }

  2. 在客户端

    Socket socket = new Socket("serverip",1234);

    OutputStream os = socket.getOutputStream();

    os.write("回声你好");

    os.flush();

    os.close();

    socket.close();

  3. 你可以在哪里有 linux 机器

    试试{

    Socket socket = new Socket("serverip",21); // connect to telnet port
    
    OutputStream os = socket.getOutputStream();
    
    // wait for server prompt
    
    Thread.sleep(1000);
    
    os.write("username\n");
    
    // wait for server prompt
    
    Thread.sleep(1000);
    
    os.write("password\n");
    
    Thread.sleep(1000);
    
    os.write("~/xyz/run.sh");
    
    os.close();
    
    socket.close();
    
    } catch(Exception ex) {
    

    }

【讨论】:

  • 这意味着我还需要在服务器端运行一个脚本。对吗?
  • 对不起,我不明白你的问题。您可以在要执行脚本的每台机器上运行服务器 - 套接字侦听器。您可以从客户端调用脚本。显然,您必须保留 bat 文件或服务器应用程序路径上的任何内容。希望这个答案是有用的......使用Linus,您可以远程登录并执行相同的操作,因此当您在Linux机器上的端口21连接时,您会收到提示,您可以编写该位以登录您的客户端并运行脚本.对于 Windows,您将需要服务器部分 - 有一个 tftp,但不确定它现在是否存在。
  • 所以在你的linux服务器/机器的客户端你可以连接到telnet,做 - os.write("\n");线程.sleep(1000); os.write("\n");线程.sleep(1000); Runtime.getRuntime().exec("echo hello world or ~/xyz/run.sh &");
【解决方案4】:

Java 不是最好的工具。然而,如果你想使用 Java,你需要在每台远程机器上设置一个服务器。服务器基本上是一个始终在运行并侦听端口的进程;它将从该端口接收消息以运行脚本。

如果脚本是安全的(如果它们在错误的时间运行不会造成任何伤害),您可以使用ServerSocket 来完成。如果它们不安全(您需要确保只有您自己能够启动该过程,我建议使用 Web 服务器(Jetty、Tomcat)来使用其安全功能(SSL/HTTPS、身份验证)。

【讨论】:

    【解决方案5】:

    如果可能的话,请勿将Java用于此任务。使用远程管理系统,例如OpenRSM(http://openrsm.sourceforge.net/)。

    【讨论】:

    • 不幸的是我必须使用java
    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 2014-02-14
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多