"USERAUTH fail" 使用具有身份的 gradle-ssh-plugin

"USERAUTH fail" using gradle-ssh-plugin with identity

我无法使用 Gradle SSH Plugin 和我的私钥连接到 SSH 主机。

build.gradle 中指定密码可以正常工作:

remotes {
    webServer {
        host = '<IP>'
        user = '<USER>'
        password = '<PASSWORD>'
    }
}

但是为了避免在构建文件中写入我的密码,我将我的环境设置为使用我的私钥连接而不输入来自 shell:

的密码
ssh <user>@<ip>

此命令在 shell 中有效,但我无法使用 Gradle 插件实现。这是我的配置:

remotes {
    webServer {
        host = '<IP>'
        user = '<USER>'
        identity = file("${System.getProperty('user.home')}/.ssh/id_rsa")
    }
}

错误是:

Caused by: com.jcraft.jsch.JSchException: USERAUTH fail at com.jcraft.jsch.UserAuthPublicKey.start(UserAuthPublicKey.java:119)

因为我可以从 shell 连接,我的配置有什么问题?

我通过添加 agent = true 属性:

解决了这个问题
remotes {
    webServer {
        host = '54.233.77.171'
        user = 'denis'
        agent = true
        identity = file("${System.getProperty('user.home')}/.ssh/id_rsa")
    }
}

agent - If this is set, Putty Agent or ssh-agent will be used on authentication

更多信息:Connections settings

我在分析了 class UserAuthPublicKey:

之后尝试了这个 属性
if(userinfo==null) throw new JSchException("USERAUTH fail");

我认为JCraft只支持PEM密钥——生成密钥时需要指定格式:

ssh-keygen -t rsa -m PEM