Maven install失败报com.jcraft.jsch.JSchException: Auth fail异常
Maven dpkg-maven-plugin构建报JSch Auth fail排查方案
报错核心是插件依赖的JSch SSH客户端连接目标VDS时认证失败,手动终端SSH连通正常仅能说明网络、服务器SSH服务本身可用,故障原因均为插件侧SSH连接配置与手动连接使用的参数不匹配,按以下优先级排查即可:
核对插件显式配置的SSH基础参数
打开项目pom.xml,定位到dpkg-maven-plugin的configuration配置节点,逐一核对以下字段:- 服务器地址、SSH端口:确认是否和手动连接时使用的参数一致,多数场景下VDS会修改默认22 SSH端口,插件未同步配置自定义端口是高频故障原因
- 登录用户名:确认配置的用户名和手动登录使用的用户名完全一致,不要混用root、业务部署用户
- 认证信息:
- 若使用密码认证:检查密码中的XML特殊字符(&、<、>、"、')是否做了转义,未转义会导致Maven解析后的密码实际值和预期不符
- 若使用密钥认证:首先确认配置的私钥路径为绝对路径、文件可读;其次注意JSch 0.1.54及以下版本不支持新版OpenSSH私钥格式(私钥头为
-----BEGIN OPENSSH PRIVATE KEY-----),仅支持传统PEM格式私钥(私钥头为-----BEGIN RSA PRIVATE KEY-----),格式不兼容时执行以下命令转换私钥格式即可:ssh-keygen -p -m PEM -f 你的私钥文件绝对路径
排除SSH配置文件依赖问题
终端手动执行SSH连接时,会默认读取当前用户~/.ssh/config中配置的主机别名、端口、密钥、用户名规则,但JSch本身不会自动加载该配置文件,多数小众Maven插件也未做该适配。不要依赖系统SSH config的隐式配置,将所有SSH连接参数(地址、端口、用户名、认证信息)全部显式配置到插件中,不要留空使用默认值。检查服务器侧SSH兼容配置
若上述配置确认无误仍报错,检查VDS的sshd服务配置:- 确认是否关闭了密码登录、仅允许密钥登录,插件认证方式需要和服务端配置匹配
- 检查
AllowUsers、AllowGroups配置,确认插件使用的登录用户在允许列表中 - 老版本JSch不支持新版OpenSSH服务默认启用的高安全等级密钥交换、加密算法,可升级插件依赖的JSch版本到0.1.55及以上,或在sshd配置中兼容老算法(不推荐)
- 若使用sudo权限执行mvn命令,注意此时会读取root用户目录下的SSH配置和私钥,而非当前登录用户的,要么避免用sudo执行mvn,要么显式指定私钥绝对路径、或给root用户配置对应访问权限。
调试定位技巧
执行mvn命令时增加debug参数,查看JSch的详细连接日志,可直接定位到认证失败的具体环节:mvn install -X
内容的提问来源于stack exchange,提问作者WhiteBite
相关产品推荐
相关产品推荐

