[英]How can I execute Linux commands on a remote machine using Java?
我有兩個安全的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是沙箱啟動的,如果沒有一些幫助,您將無法離開沙箱。
檢查套接字可能更容易,因為您可以執行您嘗試執行的操作而無需設置任何外部庫。
在主機上,您要設置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.