? ? ? ? 通过jsch可以实现基于sftp协议的文件传输,使用的是ChannelSftp类,如果要在程序中实现启动服务器的一个脚本,执行某个系统命令的话,就需要用到另一个channel类了,就是ChannelExec类。
? ? ? ? 如果项目采用maven构建的话,引入
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.50</version> </dependency>
?
? ? ? ? 代码示列:
package com.lipl; import com.jcraft.jsch.*; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Properties; /** * @author lipenglong * @ClassName: * @Description: this is a class desc. * @date 14-4-1 上午10:44 */ public class JschCommand { private Session session = null; private Channel channel = null; private String sftpHost = "localhost"; private int sftpPort = 22; private String sftpUserName = "petric"; private String sftpPassword = "123"; private int timeout = 30000; /** * 获取连接 * @return */ private ChannelExec getChannelExec() { try { if (channel != null && channel.isConnected()) { return (ChannelExec) channel; } JSch jSch = new JSch(); if (session == null || !session.isConnected()) { session = jSch.getSession(sftpUserName, sftpHost, sftpPort); session.setPassword(sftpPassword); Properties config = new Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config); session.setTimeout(timeout); session.connect(); } channel = session.openChannel("exec"); } catch (Exception e) { if (session != null) { session.disconnect(); session = null; } channel = null; } return channel == null ? null : (ChannelExec) channel; } /** * 关闭连接 */ private void closeChannel() { try { if (channel != null) { channel.disconnect(); channel = null; } if (session != null) { session.disconnect(); session = null; } } catch (Exception e) { System.out.println(e); } } /** * 执行服务器端命令 */ public boolean executeCommand(String command) { boolean flag = false; ChannelExec channelExec = getChannelExec(); if (channelExec == null) { return false; } try { channelExec.setInputStream(null); channelExec.setErrStream(System.err); channelExec.setCommand(command); InputStream in = channelExec.getInputStream(); channelExec.connect(); BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8")); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); closeChannel(); flag = true; } catch (Exception e) { System.out.println(e); flag = false; } return flag; } public static void main(String[] args) { JschCommand jschCommand = new JschCommand(); System.out.println(jschCommand.executeCommand("date")); System.out.println("----------------------------------"); System.out.println(jschCommand.executeCommand("ruby Demo.rb")); System.out.println("----------------------------------"); System.out.println(jschCommand.executeCommand("touch abc.txt")); System.out.println("----------------------------------"); System.out.println(jschCommand.executeComm