Ubuntu 22.04下Gradle用org.hidetake.ssh遇JSchException: Auth fail
解决Ubuntu 22.04升级后Gradle org.hidetake.ssh插件认证失败(Auth fail)问题
我将云服务器从Ubuntu 20.04升级到22.04后,使用org.hidetake.ssh插件执行Gradle远程上传Jar包任务时失败,报错:
com.jcraft.jsch.JSchException: Auth fail
我的ssh.run任务配置如下:
remotes { myServer { host = 'x.x.x.x' port = 22 user = 'ubuntu' identity = file('d:/a.pem') knownHosts = allowAnyHosts } }
原因分析
Ubuntu 22.04默认禁用了使用SHA-1签名的RSA密钥认证,而org.hidetake.ssh插件依赖的JSch库默认可能仍使用旧的签名算法,导致服务器拒绝认证请求。
解决方法
方案1:临时启用服务器端RSA-SHA1兼容(不推荐长期使用)
修改SSH服务配置,允许旧的RSA算法:
- 编辑sshd配置文件:
sudo nano /etc/ssh/sshd_config - 添加或修改以下配置项:
PubkeyAcceptedAlgorithms +ssh-rsa - 重启SSH服务:
sudo systemctl restart sshd
方案2:生成ED25519密钥替换旧RSA密钥(推荐)
ED25519是更安全高效的现代密钥算法,Ubuntu 22.04默认支持:
- 本地生成ED25519密钥:
ssh-keygen -t ed25519 -f d:/a_ed25519.pem - 将公钥(
d:/a_ed25519.pem.pub)内容添加到服务器的~/.ssh/authorized_keys文件中 - 修改Gradle配置里的
identity指向新密钥:identity = file('d:/a_ed25519.pem')
方案3:升级JSch库或SSH插件版本
org.hidetake.ssh插件依赖的旧版JSch不支持RSA-SHA2算法,可升级依赖:
- 在项目的
build.gradle中强制升级JSch版本:buildscript { dependencies { classpath 'com.jcraft:jsch:0.1.55' // 此版本支持RSA-SHA2签名算法 } } - 或者升级org.hidetake.ssh插件到最新版本,新版本可能已经适配了Ubuntu 22.04的算法要求
验证步骤
修改完成后,先手动测试SSH连接是否正常:
ssh ubuntu@x.x.x.x -i d:/your_new_key.pem
确认能成功登录后,再执行Gradle上传任务。
内容的提问来源于stack exchange,提问作者DKWoo
相关产品推荐
相关产品推荐

