项目里面需要用sftp上传图片,之前是没问题的,最近出问题报错,一直定位不到问题,在channel.connect()时报throw new JSchException("session is down");下面是代码 String ftpHost = ftpServerAddress;
String port = "22";
String ftpUserName = user;
String ftpPassword = password;
int ftpPort =22;
if (port != null && !port.equals("")) {
ftpPort = Integer.valueOf(port);
}
JSch jsch = new JSch(); // 创建JSch对象
session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象
if (ftpPassword != null) {
session.setPassword(ftpPassword); // 设置密码
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
session.setTimeout(timeout); // 设置timeout时间
session.connect(); // 通过Session建立链接 channel = session.openChannel("sftp"); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
return (ChannelSftp) channel; 看源码是在sendChannelOpen()里抛得异常 下面是这个函数/* 726 */ Session _session = getSession();
/* 727 */ if (!(_session.isConnected())) {
/* 728 */ throw new JSchException("session is down");
/* */ }
/* */
/* 731 */ Packet packet = genChannelOpenPacket();
/* 732 */ _session.write(packet);
/* */
/* 734 */ int retry = 2000;
/* 735 */ long start = System.currentTimeMillis();
/* 736 */ long timeout = this.connectTimeout;
/* 737 */ if (timeout != 0L) retry = 1;
/* 738 */ synchronized (this)
/* */ {
/* 741 */ while ((getRecipient() == -1) && (_session.isConnected()) && (retry > 0)) {
/* 742 */ if ((timeout > 0L) &&
/* 743 */ (System.currentTimeMillis() - start > timeout)) {
/* 744 */ retry = 0;
/* */ }
/* */
/* */ try
/* */ {
/* 749 */ long t = (timeout == 0L) ? 10L : timeout;
/* 750 */ this.notifyme = 1;
/* 751 */ super.wait(t);
/* */ }
/* */ catch (InterruptedException e) {
/* */ }
/* */ finally {
/* 756 */ this.notifyme = 0;
/* */ }
/* 758 */ --retry;
/* */ }
/* */ }
/* 761 */ if (!(_session.isConnected())) {
/* 762 */ throw new JSchException("session is down");
/* */ } 在762行抛出异常 上面也有个判断(!(_session.isConnected()))是否连接 上面没有报错,我用sftp命令能连上服务器,也能用put命令上传文件 但是用java代码的话就是报错 现在想确认下是那个地方出问题了 是网络的原因吗还是服务器配置的问题 因为之前是能上传的 jar包是jsch-0.1.50.jar 下面是截图
求大神 困扰一周了
String port = "22";
String ftpUserName = user;
String ftpPassword = password;
int ftpPort =22;
if (port != null && !port.equals("")) {
ftpPort = Integer.valueOf(port);
}
JSch jsch = new JSch(); // 创建JSch对象
session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根据用户名,主机ip,端口获取一个Session对象
if (ftpPassword != null) {
session.setPassword(ftpPassword); // 设置密码
}
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config); // 为Session对象设置properties
session.setTimeout(timeout); // 设置timeout时间
session.connect(); // 通过Session建立链接 channel = session.openChannel("sftp"); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
return (ChannelSftp) channel; 看源码是在sendChannelOpen()里抛得异常 下面是这个函数/* 726 */ Session _session = getSession();
/* 727 */ if (!(_session.isConnected())) {
/* 728 */ throw new JSchException("session is down");
/* */ }
/* */
/* 731 */ Packet packet = genChannelOpenPacket();
/* 732 */ _session.write(packet);
/* */
/* 734 */ int retry = 2000;
/* 735 */ long start = System.currentTimeMillis();
/* 736 */ long timeout = this.connectTimeout;
/* 737 */ if (timeout != 0L) retry = 1;
/* 738 */ synchronized (this)
/* */ {
/* 741 */ while ((getRecipient() == -1) && (_session.isConnected()) && (retry > 0)) {
/* 742 */ if ((timeout > 0L) &&
/* 743 */ (System.currentTimeMillis() - start > timeout)) {
/* 744 */ retry = 0;
/* */ }
/* */
/* */ try
/* */ {
/* 749 */ long t = (timeout == 0L) ? 10L : timeout;
/* 750 */ this.notifyme = 1;
/* 751 */ super.wait(t);
/* */ }
/* */ catch (InterruptedException e) {
/* */ }
/* */ finally {
/* 756 */ this.notifyme = 0;
/* */ }
/* 758 */ --retry;
/* */ }
/* */ }
/* 761 */ if (!(_session.isConnected())) {
/* 762 */ throw new JSchException("session is down");
/* */ } 在762行抛出异常 上面也有个判断(!(_session.isConnected()))是否连接 上面没有报错,我用sftp命令能连上服务器,也能用put命令上传文件 但是用java代码的话就是报错 现在想确认下是那个地方出问题了 是网络的原因吗还是服务器配置的问题 因为之前是能上传的 jar包是jsch-0.1.50.jar 下面是截图
求大神 困扰一周了
LZ,你好!这是ChrootDirectory权限问题,sftp要求必须是750或者是755,不能设置成777!