2011-10-31 127 views

回答

4

本質上,您需要在Java應用程序中打開與其他服務器的ssh連接。 OpenSSH網站有一些有用的信息庫,它們會給你在Java中的ssh支持。

它看起來像Ganymed SSH-2 for Java是那裏最好的選擇,但我沒有使用它們中的任何一個,所以你需要看看你需要什麼。

一旦你有了一個ssh連接,你將能夠運行命令,就像你使用任何其他ssh客戶端登錄一樣。

+0

你的OpenSSH鏈接不工作 – 2017-11-09 04:13:12

0

檢查套接字可能會更容易,因爲您可以在不需要設置任何外部庫的情況下執行您要做的工作。

在主機上,你要設置一個ServerSocket對象,並從客戶機上打開一個Socket。我沒有時間鍵入整個示例,但請檢查此方法,以便在Java中通過Internet建立服務器 - 主機連接的簡單方法。

http://zerioh.tripod.com/ressources/sockets.html

一旦你得到的設置,您可以從計算機上的ServerSocket應該執行命令,並做周圍

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); 
} 

該線的東西要輸入你的shell命令棘手的部分是與套接字建立一個可靠的主機 - 客戶端連接,但如果你正在做一些簡單的事情,你應該對上面鏈接的例子很好。

+0

你真的想重新發明輪子並重做所有的東西來保護連接,當你可以使用ssh嗎? – lc2817

+0

我誤解了這個問題,作爲對Java實現的請求。感謝您指出。 –

2

你可以通過多種方式做到這一點;然而,幾乎每種方式都涉及網絡連接。

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

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

你可以利用它處理建立客戶端 - 服務器對,例如RMI,SOAP,CORBA的某些方面的架構等

在Java支持噸聯網選項的結束,讓你有更多的途徑這樣做比你想象的要多。只要確保不要在Web瀏覽器中執行此操作,因爲這些JVM已啓動沙盒,並且無法在沒有任何幫助的情況下離開沙盒。

8

Jsch(here)允許您使用SSH連接到遠程服務器,並輕鬆執行shell命令(以及很多其他事情,如SCP,SFTP ...)。沒有太多的文檔,但是你有一些真正有用的實現示例here(甚至是你想要做的一個例子here)。

您還可以將Jsch與Expect4j結合起來,這樣可以更好地控制要執行的命令(很好的示例here)。

+0

+1爲完美答案....非常感謝 –

相關問題