zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    这样程序的问题就解决了。。。

  • 相关阅读:
    解决Vss链接问题清除Windows共享登录的用户名密码记录(转)
    C# 激活正在运行的程序
    Log4Net 使用方法
    对Javascript闭包的一些理解
    根据数据库获取表名集合,根据表名获取字段信息
    C#引用类型和值类型的区别(转)
    c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
    理解VC工程文件类型
    MFC中的UpdateData()
    字节对齐
  • 原文地址:https://www.cnblogs.com/boshen-hzb/p/6291949.html
Copyright © 2011-2022 走看看