4

我无法使用带有我的私钥的Gradle SSH 插件连接到 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")
    }
}

错误是:

引起:com.jcraft.jsch.JSchException: USERAUTH 在 com.jcraft.jsch.UserAuthPublicKey.start(UserAuthPublicKey.java:119) 失败

由于我能够从 shell 连接,我的配置有什么问题?

4

2 回答 2

15

我通过添加agent = true属性解决了这个问题:

remotes {
    webServer {
        host = '54.233.77.171'
        user = 'denis'
        agent = true
        identity = file("${System.getProperty('user.home')}/.ssh/id_rsa")
    }
}

agent - 如果设置了此项,Putty Agent 或 ssh-agent 将用于身份验证

有关详细信息:连接设置

在分析了UserAuthPublicKey类后,我尝试了这个属性:

if(userinfo==null) throw new JSchException("USERAUTH fail");
于 2015-10-17T21:56:22.093 回答
2

我认为 JCraft 仅支持 PEM 密钥 - 生成密钥时,您需要指定格式:

ssh-keygen -t rsa -m PEM
于 2020-01-14T21:22:52.103 回答