簡體   English   中英

如何使用Java在遠程計算機上執行Linux命令?

[英]How can I execute Linux commands on a remote machine using Java?

我有兩個安全的Linux服務器。 在一台機器上,我的Java應用程序正在運行 我需要在第一台機器上用Java在第二台機器上運行Linux命令。 我怎么能這樣做?

Jsch( 這里 )允許您使用SSH連接到遠程服務器並輕松執行shell命令(以及許多其他東西,如SCP,SFTP ......)。 沒有大量的文檔資料,但你有一些真正有用的實施例子在這里 (甚至你想要做什么的例子在這里 )。

您還可以將Jsch與Expect4j結合使用,這樣可以更好地控制您想要執行的命令( 這里的例子很好)。

實際上,您需要從Java應用程序中打開與其他服務器的ssh連接。 OpenSSH站點提供了一些有關庫的有用信息,這些庫將為您提供Java中的ssh支持。

看起來Ganymed SSH-2 for Java是最好的選擇,但我沒有使用它們,所以你需要看看你需要什么。

一旦有了ssh連接,就可以像使用任何其他ssh客戶端登錄一樣運行命令。

你可以通過多種方式做到這一點; 但是,幾乎所有方式都涉及網絡連接。

您可以編寫客戶端 - 服務器對Java程序,客戶端連接到服務器並提交命令。

您可以編寫Java以使用現有服務器,例如sshd,telnetd,rsh,ftpd或預先存在的其他服務器,該服務器允許遠程命令。

您可以利用一種架構來處理建立客戶端 - 服務器對的某些方面,如RMI,SOAP,CORBA等。

最后,Java支持大量的網絡選項,因此您可以通過多種方式實現此目的。 只需確保您不在Web瀏覽器中執行此操作,因為這些JVM是沙箱啟動的,如果沒有一些幫助,您將無法離開沙箱。

檢查套接字可能更容易,因為您可以執行您嘗試執行的操作而無需設置任何外部庫。

在主機上,您要設置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);
}

棘手的部分是使用套接字建立一個可靠的主機 - 客戶端連接,但是如果你做的很簡單,你應該對上面的鏈接中的例子沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM