通过 SSH 发布无效的私钥



我在 Jenkins 中使用 Publish over SSH 连接到远程服务器。我已经有一个私钥(OpenSSH 格式以 -----BEGIN OPENSSH PRIVATE KEY----- 开头),它可以在 jenkins 用户下的 shell 中完美运行,但是当我从 Web 界面使用它时,它会抛出 jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@4bba7224]

同时我在 Jenkins 机器上生成了另一个密钥(Docker 中的 Debian GNU/Linux 9)并id_rsa.pub复制到远程机器上。此键不同,以-----BEGIN RSA PRIVATE KEY-----开头,对于此键错误Message [Auth fail],因此它理解键。

我刚刚遇到了同样的问题。该插件被较新的OpenSSH格式弄糊涂了(我还有一个以-----BEGIN OPENSSH PRIVATE KEY-----开头的私钥)。

我保存了密钥并将其加载到PuTTyGen中,然后转换>导出OpenSSH密钥(请注意,有一个我们不想要的"导出OpenSSH密钥(强制新文件格式)"。这显然是在Windows上;我不确定其他操作系统上的等效物是什么。

我新导出的密钥以-----BEGIN RSA PRIVATE KEY-----开头,插件在此之后接受了它。

使用此命令生成新的密钥

ssh-keygen -m PEM

键从

-----BEGIN RSA PRIVATE KEY-----

Jenkins 中的 sshCommand 将接受此密钥

withCredentials([sshUserPrivateKey(
    credentialsId: 'server', 
    usernameVariable: 'USER', 
    keyFileVariable: 'KEY_FILE'),
    string(credentialsId: 'server-ip', variable: 'EC2_IP')
]) {
    def remote = [:]
    remote.name = USER
    remote.host = EC2_IP
    remote.user = USER
    remote.identityFile = KEY_FILE
    remote.allowAnyHosts = true
    sshCommand remote: remote, command: "pwd"
}

最新更新