天天看点

Sftp访问方式JSch

使用JSch访问Sftp有时候会报异常:reject HostKey,有两种方式可以解决该异常。

1.创建实现com.jcraft.jsch.UserInfo的实体类,且该实体类必须存在一个public型无参构造函数;

2.设置强制HostKey检查为no。

实现com.jcraft.jsch.UserInfo的实体类:

/**
 * 
 */
package sftp;

import com.jcraft.jsch.UserInfo;

/**
 * @author lxzqz
 *
 */
public class SFtpUserInfo implements UserInfo {

	/**
	 * 构造函数,此构造函数不可少
	 */
	public SFtpUserInfo() {
	}


	public String getPassword() {
		return null;
	}

	public boolean promptPassword(String arg0) {
		return false;
	}

	public boolean promptPassphrase(String arg0) {
		return false;
	}

	public boolean promptYesNo(String arg0) {
		return true;
	}

	public void showMessage(String arg0) {
	}

	@Override
	public String getPassphrase() {
		return null;
	}

}
           

 使用第一种方式连接Sftp和使用第二种方式连接Sftp的代码如下:

package sftp;

import java.util.Properties;

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

public class Sftp {
	public static void sftpUserInfo() throws Exception{
		JSch js = new JSch();
		//sftp用户名、ip、端口
		Session session = js.getSession("test", "172.16.2.183", 10086);
		//sftp密码
		session.setPassword("test");
		//创建一个用户
		session.setUserInfo(new SFtpUserInfo());
		session.connect();
		Channel channel = session.openChannel("sftp");
		channel.connect();
		ChannelSftp cmd = (ChannelSftp)channel;
		//cmd各种命令操作sftp
		//释放资源
		channel.disconnect();
		session.disconnect();
	}
	
	public static void strictHostKeyChecking() throws Exception{
		JSch js = new JSch();
		//sftp用户名、ip、端口
		Session session = js.getSession("test", "172.16.2.183", 10086);
		//sftp密码
		session.setPassword("test");
		//设置强制HostKey检查为no
		Properties config = new Properties();
		config.put("StrictHostKeyChecking", "no");
		session.setConfig(config);
		session.connect();
		Channel channel = session.openChannel("sftp");
		channel.connect();
		ChannelSftp cmd = (ChannelSftp)channel;
		//cmd各种命令操作sftp
		//释放资源
		channel.disconnect();
		session.disconnect();
	}
}