Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在远程机器上执行Linux命令?_Java_Linux_Ssh - Fatal编程技术网

如何使用Java在远程机器上执行Linux命令?

如何使用Java在远程机器上执行Linux命令?,java,linux,ssh,Java,Linux,Ssh,我有两个安全的linux服务器。在一台机器上,我的Java应用程序正在运行。我需要在Java中第一台机器的第二台机器上运行Linux命令。我该怎么做呢?基本上,您需要从Java应用程序中打开到其他服务器的ssh连接。该站点提供了一些关于库的有用信息,这些库将为您提供Java中的ssh支持 看起来这是最好的选择,但我没有用过,所以你需要看看你需要什么 一旦建立了ssh连接,您就可以像使用任何其他ssh客户端登录一样运行命令。签出套接字可能会更容易,因为您可以在不设置任何外部库的情况下执行您尝试执行

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

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

看起来这是最好的选择,但我没有用过,所以你需要看看你需要什么


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

签出套接字可能会更容易,因为您可以在不设置任何外部库的情况下执行您尝试执行的操作

在主机上,您需要设置一个ServerSocket对象,然后从客户机上打开一个套接字。我没有时间打一个完整的例子,但看看这篇文章,可以找到一种用Java在Internet上建立服务器主机连接的简单方法

设置好后,您需要从计算机上的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);
}

棘手的部分是使用套接字设置一个可实现的主机-客户端连接,但是如果您正在做一些简单的事情,您应该可以使用上面链接中的示例;然而,几乎每种方式都涉及到网络连接

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

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

您可以利用一个体系结构来处理建立客户机-服务器对的某些方面,如RMI、SOAP、CORBA等

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

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


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

首先想到的是套接字。当你可以使用ssh时,你真的想重新发明轮子,重做所有的事情来保护连接吗?我把这个问题误解为对Java实现的请求。谢谢你指出这一点。