Java执行SSH/SCP之JSch

字体大小: 中小 标准 ->行高大小: 标准
JSch (Java Secure Channel)是纯Java的SSH2实现。可以把它集成到你的Java应用中来连接sshd服务器,执行指令(port forward, file transfer, terminal emulation)。Ant、Eclipse-CVSSSH2、NetBeans等工具都在使用它。如果你的服务部署在linux服务器中,有时你需要执行一些系统命令,这时候需要用到Runtime.getRuntime().exec("java -version"); 但是这样会让你的服务器内存瞬间增长很多。JSch基于JavaTM Cryptography Extension(JCE)通过Socket来实现通信,可以大大减少内存的暴涨。 

http://www.jcraft.com/ 

版本:jsch-0.1.51.jar 

SSH例子: 
Java代码  
  1. public void ssh() throws Exception {  
  2.     JSch jsch = new JSch();  
  3.   
  4.     // connect session  
  5.     Session session = jsch.getSession(USER_ID, HOST_NAME, 22);  
  6.     session.setPassword(PASSWORD);  
  7.     session.setConfig("StrictHostKeyChecking""no");  
  8.     session.connect();  
  9.   
  10.     // exec command remotely  
  11.     String command = "ls -l";  
  12.     ChannelExec channel = (ChannelExec) session.openChannel("exec");  
  13.     channel.setCommand(command);  
  14.     channel.connect();  
  15.   
  16.     // get stdout  
  17.     InputStream in = channel.getInputStream();  
  18.     byte[] tmp = new byte[1024];  
  19.     while (true) {  
  20.         while (in.available() > 0) {  
  21.             int i = in.read(tmp, 01024);  
  22.             if (i < 0)  
  23.                 break;  
  24.             System.out.print(new String(tmp, 0, i));  
  25.         }  
  26.         if (channel.isClosed()) {  
  27.             System.out.println("exit-status: " + channel.getExitStatus());  
  28.             break;  
  29.         }  
  30.         try {  
  31.             Thread.sleep(1000);  
  32.         } catch (Exception ee) {  
  33.         }  
  34.     }  
  35.     channel.disconnect();  
  36.     session.disconnect();  
  37. }  


SFTP例子: 
Java代码  
  1. public void sftp() throws Exception {  
  2.     JSch jsch = new JSch();  
  3.       
  4.     // connect session  
  5.     Session session = jsch.getSession(USER_ID, HOST_NAME, 22);  
  6.     session.setPassword(PASSWORD);  
  7.     session.setConfig("StrictHostKeyChecking""no");  
  8.     session.connect();  
  9.   
  10.     // sftp remotely  
  11.     ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");  
  12.     channel.connect();  
  13.   
  14.     // ls  
  15.     Vector list = channel.ls(".");  
  16.     System.out.println("---- ls");  
  17.     for (int i = 0; i < list.size(); i++) {  
  18.         System.out.println(list.get(i));  
  19.     }  
  20.   
  21.     // lstat  
  22.     try {  
  23.         SftpATTRS stat = channel.lstat("index.html");  
  24.         System.out.println("---- lstat");  
  25.         System.out.println(stat);  
  26.         System.out.println(stat.getSize());  
  27.     } catch (SftpException ex) {  
  28.         ex.printStackTrace();  
  29.     }  
  30.   
  31.     // get  
  32.     channel.get("./index.html""./index.html.dst");  
  33.     // put  
  34.     channel.put(new FileInputStream("c:/test.txt"), "test_new.txt");  
  35.   
  36.     channel.disconnect();  
  37.     session.disconnect();  
  38. }  


其他的工具还有: 
Ganymed SSH-2:https://code.google.com/p/ganymed-ssh-2/ 
sshj :https://github.com/shikhar/sshj 
Apache SSHD:http://mina.apache.org/sshd-project/

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68307.html