SFTP连接异常 Could not connect to SFTP server. Caused by: com.jcraft.jsch.JSchException: Auth fail

连接SFTP服务器时总是抛出以下异常,而且自己也在本地测试800多遍了都没有任何问题,就是在Linux平台下出现的
org.apache.commons.vfs.FileSystemException: Could not connect to SFTP server at "168.22.73.69".
    at org.apache.commons.vfs.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:214)
    at com.wxcking.admins.util.sftp.SFTPUtil.connectServer(SFTPUtil.java:270)
    at com.wxcking.admins.util.sftp.SFTPUtil.<init>(SFTPUtil.java:66)
    at com.wxcking.admins.util.SftpConnectUtil.connectSupBankSftp(SftpConnectUtil.java:36)
    at com.wxcking.admins.redeem.service.RedemptionBankService.uploadRegulatoryBank(RedemptionBankService.java:285)
    at com.wxcking.admins.redeem.service.RedemptionBankService$$FastClassByCGLIB$$864fe42a.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:627)
    at com.wxcking.admins.redeem.service.RedemptionBankService$$EnhancerByCGLIB$$b98834a5.uploadRegulatoryBank(<generated>)
    at com.wxcking.manage.contract.service.adminsRedeemCollectService.processCollect(adminsRedeemCollectService.java:89)
    ... ...
Caused by: com.jcraft.jsch.JSchException: Auth fail
    at com.jcraft.jsch.Session.connect(Session.java:464)
    at com.jcraft.jsch.Session.connect(Session.java:158)
    at org.apache.commons.vfs.provider.sftp.SftpClientFactory.createConnection(SftpClientFactory.java:210)
    ... 111 more
这种异常主要是看Caused by后面的 com.jcraft.jsch.JSchException: Auth fail,报的是 Caused by: com.jcraft.jsch.JSchException: Auth fail验证失败。另外,使用FlashFXP等工具连接SFTP时都没有问题,使用Java写的程序连接出现Auth fail异常。
从网上查询到解决的方法:
第一种说法是配置参数比如用户名和密码等配置错误。
第二说法是在/etc/ssh/sshd_config文件夹的一个配置项PasswordAuthentication 默认为no,“PasswordAuthentication”设置是否允许口令验证,把它改为yes,重启服务就OK了。
如果您在这一步就已经解决好Auth fail异常的话,祝贺您,您太幸运了!
-----------------------------------------
-----------------------------------------
-----------------------------------------
当我把以上方法都试了以后,还是报Auth fail异常,这时要看一下SFTP连接代码了,在连接SFTP代码中加上下面代码,另外再实现一个日志类。
/**
 * SFTP工具类
 */
public class SFTPUtil {
    /**
     * 连接SFTP服务器
     * @throws JSchException
     * @throws FileSystemException
     */
    private void connectServer() throws JSchException, FileSystemException {
        if (this.channel != null) {
            disconnect();
        }
        
        com.jcraft.jsch.Logger logger = new SettleLogger();
        JSch.setLogger(logger);

        
        FileSystemOptions fso = new FileSystemOptions();
        SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(fso, "no");
        
        this.session = SftpClientFactory.createConnection(this.ftpHost,
                this.ftpPort, this.userName.toCharArray(),
                this.password.toCharArray(), fso);
        Channel _channel = this.session.openChannel("sftp");
        _channel.connect();
        this.channel = ((ChannelSftp) _channel);
    }
}

实现com.jcraft.jsch.Logger日志,这个日志是jsch本身的日志工具类,和org.apache.log4j.Logger的日志类不一样。

/**
 * 日志工具类
 */
public class SettleLogger implements com.jcraft.jsch.Logger {
    public boolean isEnabled(int level) {
        return true;
    }

    public void log(int level, String msg) {
        System.out.println(msg);
    }
}
这样程序的问题就解决了。。。

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据提供的引用内容,你遇到的问题是`Caused by: com.jcraft.jsch.JSchException: Session.connect: java.net.SocketException: Connection reset`。这个错误通常是由于网络连接问题引起的。可能有以下几个原因导致这个错误: 1. 服务器端口未打开或被防火墙阻止:请确保你的SFTP服务器端口已正确打开,并且没有被防火墙阻止。 2. 服务器地址错误:请确保你的SFTP服务器地址是正确的,可以尝试使用ping命令来测试服务器的连通性。 3. 服务器连接超时:如果服务器连接超时,可能是由于网络延迟或服务器负载过高导致的。你可以尝试增加连接超时时间或者优化服务器性能。 4. 客户端配置错误:请确保你的Java代码中的SFTP配置是正确的,包括服务器地址、端口、用户名、密码等。 以下是一个示例代码,演示了如何使用JSch库进行SFTP上传文件: ```java import com.jcraft.jsch.*; public class SftpExample { public static void main(String[] args) { String host = "sftp.example.com"; int port = 22; String username = "your-username"; String password = "your-password"; String localFilePath = "/path/to/local/file.txt"; String remoteFilePath = "/path/to/remote/file.txt"; try { JSch jsch = new JSch(); Session session = jsch.getSession(username, host, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); channel.connect(); channel.put(localFilePath, remoteFilePath); channel.disconnect(); session.disconnect(); } catch (JSchException | SftpException e) { e.printStackTrace(); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值