为什么 Jenkins 在启动代理时说 "Server rejected the 1 private key(s)"?

Why Jenkins says "Server rejected the 1 private key(s)" while launching the agent?

我可以使用 SSH 成功连接到远程机器,但是当我从 Jenkins 启动代理时,它会抛出以下错误:

ERROR: Server rejected the 1 private key(s) for user1 (credentialId:xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/method:publickey)
[01/19/17 05:35:15] [SSH] Authentication failed.
hudson.AbortException: Authentication failed.
    at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:1219)
    at hudson.plugins.sshslaves.SSHLauncher.call(SSHLauncher.java:714)
    at hudson.plugins.sshslaves.SSHLauncher.call(SSHLauncher.java:709)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[01/19/17 05:35:15] Launch failed - cleaning up connection
[01/19/17 05:35:15] [SSH] Connection closed.

我可以使用 user1 建立从主机到节点机器的 SSH 连接,但是当我尝试使用来自 jenkins 的 user1 启动代理时,它拒绝私钥。有解决这个问题的方法吗?

我按照以下步骤解决了这个问题:

来自目标从节点的控制台

  1. 切换到 root 用户:
sudo su
  1. 添加一个主目录为 /var/lib/jenkins 的 jenkins 用户(注意:我将主目录保存在 /var/lib/jenkins):
useradd -d /var/lib/jenkins jenkins

来自詹金斯大师

从主

上的 Jenkins 用户复制 /var/lib/jenkins/.ssh/id_rsa.pub 密钥

来自目标从节点的控制台

  1. 为 Jenkins 用户创建一个 authorized_keys 文件
mkdir /var/lib/jenkins/.ssh
touch /var/lib/jenkins/.ssh/authorized_keys
  1. 将 Jenkins master 中的密钥粘贴到文件 vim 中。保存 :wq!

  2. 确保文件拥有正确的所有者和权限。

chown -R jenkins /var/lib/jenkins/.ssh
chmod 600 /var/lib/jenkins/.ssh/authorized_keys
chmod 700 /var/lib/jenkins/.ssh

我的解决方案是:

$ user add -d /var/lib/jenkins jenkins
$ sudo su
$ passwd jenkins
$ chown -R jenkins /var/lib/jenkins/.ssh/*
$ chmod 700 .ssh

修改了2个小时后成功了...

我按照以下步骤解决了这个问题:

1) 确保您在从机和主机中都在正确的路径上。您还需要使用正确的用户登录计算机。假设我需要创建一个新的全局 jenkins 用户 "jenkins" 并且我希望我的密钥位于路径“/home/jenkins/.ssh/”中,首先将 "jenkins" 用户添加到机器中。

2) 现在创建 .ssh 文件夹并使用 https://support.cloudbees.com/hc/en-us/articles/222978868-How-to-Connect-to-Remote-SSH-Slaves-

中给出的步骤生成 ssh 密钥

3) 确保在您的主机中执行上述步骤 - 1 和 2

4) 您需要在同一路径的主从计算机上拥有相同的 "jenkins" 用户权限的 ssh 密钥。

5) 最后,来回 ssh 两个机器 IP,以检查终端的双向连接。

6) 配置 jenkins 凭据和节点。确保在节点配置中提供相同的远程根目录 - "/home/jenkins" 和 select "manually trusted key verification strategy" - 如 https://linuxacademy.com/community/posts/show/topic/16008-jenkins-adding-a-slave

中所建议

大师需要为我添加已知主机列表。 您需要做的是从本地通过 SSH 连接到 master。然后使用 masters 私钥通过 SSH 连接到 slave。如果您可以手动执行此操作,那么 Jenkins 也可以执行此操作。

我在 Jenkins 中使用了 masters 私钥作为凭证,按照@Aamir 的回答进行操作,然后终于取得了一些成功。