java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行(改进) (一)

2014-11-24 11:14:47 · 作者: · 浏览: 0

我写过一篇java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行,现在想来,觉得调用方式太过于绕,不符合我写程序的风格,所以进行了改进。
参数类,用于配置连接的参数,SshConfiguration.java

[java]
/**
*
*/
package com.versou.util.jsch;

/**
* @author hadoop
*
*/
public class SshConfiguration {

private String host;

private String username;

private String password;

private int port;

public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public int getPort() {
return port;
}

public void setPort(int port) {
this.port = port;
}
}

/**
*
*/
package com.versou.util.jsch;

/**
* @author hadoop
*
*/
public class SshConfiguration {

private String host;

private String username;

private String password;

private int port;

public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public int getPort() {
return port;
}

public void setPort(int port) {
this.port = port;
}
}
工具类,VersouSshUtil.java
[java]
/**
*
*/
package com.versou.util.jsch;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Properties;

import org.apache.log4j.Logger;

import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

/**
* @author hadoop
*
*/
public class VersouSshUtil {

private ChannelSftp channelSftp;

private ChannelExec channelExec;

private Session session = null;

private int timeout = 60000;

private static final Logger LOG = Logger.getLogger(VersouSshUtil.class);

public VersouSshUtil(SshConfiguration conf) throws Exception
{
LOG.info("尝试连接到....host:" + conf.getHost() + ",username:" + conf.getUsername() + ",password:" + conf.getPassword() + ",port:" + conf.getPort());
JSch jsch = new JSch(); // 创建JSch对象
session = jsch.getSession(conf.getUsername(), conf.getHost(), conf.getPort()); // 根据用户名,主机ip,端口获取一个Session对象
session.setPassword(conf.getPassword()); // 设置密码
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
session.setTimeout(timeout); // 设置timeout时间
session.connect(); // 通过Session建立链接
}

public void download(String src, String dst) throws Exception
{
channelSftp = (ChannelSftp)session.openChannel("sftp");
channelSftp.connect();
channelSftp.get(src, dst, new FileProgressMonitor(), ChannelSftp.OVERWRITE);
channelSftp.quit();
}

public void