【发布时间】:2011-12-18 11:58:50
【问题描述】:
我有两台安全的 linux 服务器。在一台机器上,我的 Java 应用程序正在运行。我需要在 Java 中的第一台机器上在第二台机器上运行 Linux 命令。我该怎么做?
【问题讨论】:
我有两台安全的 linux 服务器。在一台机器上,我的 Java 应用程序正在运行。我需要在 Java 中的第一台机器上在第二台机器上运行 Linux 命令。我该怎么做?
【问题讨论】:
本质上,您需要从 Java 应用程序中打开与其他服务器的 ssh 连接。 OpenSSH 站点提供了一些有用的库信息,这些信息将为您提供 Java 中的 ssh 支持。
看起来Ganymed SSH-2 for Java 是最好的选择,但我没有使用过任何一个,所以你需要看看你需要什么。
一旦您建立了 ssh 连接,您就可以像使用任何其他 ssh 客户端登录一样运行命令。
【讨论】:
您可以通过多种方式做到这一点;但是,几乎所有方式都涉及网络连接。
您可以编写客户端-服务器对 Java 程序,客户端连接到服务器并提交命令。
您可以编写 Java 以使用现有服务器,例如 sshd、telnetd、rsh、ftpd,或允许在远程端执行命令的预先存在的其他服务器。
您可以利用一种架构来处理建立客户端-服务器对的某些方面,例如 RMI、SOAP、CORBA 等。
最终,Java 支持大量的网络选项,因此您可以使用比您想象的更多的方式来实现这一点。只需确保您不要在 Web 浏览器中执行此操作,因为这些 JVM 是在沙盒中启动的,如果没有一些帮助,您将无法离开沙盒。
【讨论】:
检查 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);
}
棘手的部分是用套接字建立一个可靠的主机-客户端连接,但如果你做一些简单的事情,你应该可以使用上面链接中的示例。
【讨论】: