为什么 Jenkins 在启动代理时显示“服务器拒绝了 1 个私钥”?

问题描述 投票:0回答:6

我能够使用 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$2.call(SSHLauncher.java:714)
    at hudson.plugins.sshslaves.SSHLauncher$2.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
启动代理时,它拒绝私钥。有什么办法可以解决这个问题吗?

jenkins ssh devops jenkins-agent
6个回答
25
投票

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

从目标从节点的控制台

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

来自 Jenkins 大师

从 master 上的

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. 保存
  3. 确保文件具有正确的所有者和权限。

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

12
投票

将 ssh 密钥类型从“rsa”更改为“ed25519”对我有用

ssh-keygen -t ed25519

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- 中给出的步骤生成 ssh 密钥奴隶-

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

4)您需要在主机和从机中拥有相同路径的 ssh 密钥并具有相同的“jenkins”用户权限。

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

6) 配置 jenkins 凭证和节点。确保在节点配置中提供相同的远程根目录 - “/home/jenkins”,并选择“手动信任密钥验证策略” - 如 https://linuxacademy.com/community/posts/show/topic/ 中的建议16008-詹金斯-添加-奴隶


1
投票

我的解决方案是:

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

折腾了2个小时后终于成功了...


1
投票

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

我使用主私钥作为 Jenkins 中的凭证,遵循@Aamir 的回答,最后终于取得了一些成功。


0
投票

对于 CIS 强化计算机,问题也可能是用户未列在 sshd 配置文件的 AllowUsers 选项中。

就我而言,我将

/etc/ssh/sshd_config
中的最后一行从
AllowUsers ec2-user
更改为
AllowUsers ec2-user jenkins
,然后重新启动 sshd 服务:
systemctl restart sshd

© www.soinside.com 2019 - 2024. All rights reserved.