我在 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"
}