程式扎記: [ Java 代碼範本 ] 使用 JSch 透過 SSH 對遠端進行命令發送

標籤

2011年8月9日 星期二

[ Java 代碼範本 ] 使用 JSch 透過 SSH 對遠端進行命令發送

前言 :
最近專案需求, 因為 Karaf 有支援 SSH 連線, 所以打算寫一個簡單的 GUI 遠端控制 Karaf 進行 bundle 的安裝與移除. 於是就 google 到一個好用的 SSH 套件 JSch. 底是下官方對該套件的介紹 : 

JSch is a pure Java implementation of SSH2.
JSch allows you to connect to an sshd server and use port forwarding, X11 forwarding, file transfer, etc., and you can integrate its functionality into your own Java programs. JSch is licensed under BSD style license.

範例代碼 :
接著我們將透過 JSch 套件連接 Karaf 的 SSH channel 並發送命令 "osgi:list" 來取的 Karaf 的 bundle 清單. 參考代碼如下 :
- LoginKarafTest.java :
  1. package john.jsch;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.InputStream;  
  5. import java.io.InputStreamReader;  
  6.   
  7. import com.jcraft.jsch.Channel;  
  8. import com.jcraft.jsch.ChannelExec;  
  9. import com.jcraft.jsch.JSch;  
  10. import com.jcraft.jsch.Session;  
  11.   
  12. public class LoginKarafTest {  
  13.     public static void main(String args[])  
  14.     {  
  15.         String cmd = "osgi:list";  
  16.         try  
  17.         {  
  18.          JSch jsch=new JSch();  
  19.             
  20.           String host="localhost";  
  21.           String user="karaf";  
  22.           int port = 8101;  
  23.           Session session=jsch.getSession(user, host, port);  
  24.           session.setPassword("karaf");  
  25.           session.setConfig("StrictHostKeyChecking""no");  
  26.           session.connect(30000);   // making a connection with timeout.  
  27.             
  28.           Channel channel = session.openChannel("exec");  
  29.          ((ChannelExec) channel).setCommand(cmd);               
  30.           channel.connect();  
  31.           BufferedReader br = new BufferedReader(new InputStreamReader(channel.getInputStream()));  
  32.           String line = null;  
  33.           while((line=br.readLine())!=null)  
  34.           {  
  35.               System.out.printf("\t[Resp] %s\n", line);  
  36.           }  
  37.           channel.disconnect();         
  38.           session.disconnect();  
  39.             
  40.         }  
  41.         catch(Exception e){  
  42.           e.printStackTrace();  
  43.         }  
  44.     }  
  45. }  

執行結果可能如下 :


補充說明 :
JSch online API
JSch example list

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!