You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Jenkins SSH-slave Docker镜像时遇‘Server rejected the 1 private key’错误求助

Jenkins主从容器SSH认证失败的排查与修复

我在Ubuntu系统上用jenkins/jenkins:lts和jenkins/ssh-slave镜像部署Jenkins主从容器,操作步骤如下:

  • 进入Jenkins主节点容器终端:docker exec -it container_id bash,运行ssh-keygen生成SSH密钥
  • 通过Dockerfile将生成的公钥添加到SSH-slave容器的authorized_keys文件中
  • 按指引将私钥添加到Jenkins凭据中

但在配置后遇到了SSH认证失败的错误,日志如下:

[02/08/19 20:31:06] [SSH] Opening SSH connection to ###.##.#.#:22.
[02/08/19 20:31:06] [SSH] SSH host key matches key in Known Hosts file. Connection will be allowed.
ERROR: Server rejected the 1 private key(s) for jenkins (credentialId:worker-ssh/method:publickey)
[02/08/19 20:31:06] [SSH] Authentication failed. Authentication failed.
[02/08/19 20:31:06] Launch failed - cleaning up connection
[02/08/19 20:31:06] [SSH] Connection closed.

我的Jenkins从节点模板配置:

  • 名称:jenkins-worker
  • 使用方式:尽可能使用此节点
  • 启动方式:通过SSH启动代理
  • 主机名:从ifconfig获取的IP地址
  • 主机密钥验证策略:已知主机文件验证策略(.ssh/known_hosts包含对应主机IP条目)

SSH-slave的Dockerfile内容:

#Docker version 18.09.1
FROM jenkins/ssh-slave
COPY /.ssh/id_rsa.pub /.ssh/authorized_keys
RUN chmod 744 /.ssh/authorized_keys

我之前也踩过这个SSH认证的坑,咱们一步步来修复:

1. 修正Dockerfile中的权限问题

SSH对authorized_keys和.ssh目录的权限要求非常严格,你的Dockerfile里的权限设置不对:

  • .ssh目录必须设置为700(只有所有者能读写执行)
  • authorized_keys必须设置为600(只有所有者能读写)

修改后的Dockerfile应该是这样:

#Docker version 18.09.1
FROM jenkins/ssh-slave
# 先创建目录并设置权限,避免镜像中目录权限异常
RUN mkdir -p /.ssh && chmod 700 /.ssh
COPY /.ssh/id_rsa.pub /.ssh/authorized_keys
RUN chmod 600 /.ssh/authorized_keys

2. 确保主节点密钥是用jenkins用户生成的

进入主节点容器时,默认用户是root吗?如果是,你生成的密钥属于root用户,但Jenkins服务是用jenkins用户运行的,会导致权限不足无法读取私钥。

正确的生成步骤应该是:

# 进入容器后切换到jenkins用户
docker exec -it container_id su jenkins
# 生成密钥,一路回车默认设置即可
ssh-keygen -t rsa -b 4096 -C "jenkins-master@container"
# 复制公钥到本地,用于构建slave镜像
docker cp container_id:/var/jenkins_home/.ssh/id_rsa.pub ./

3. 检查Jenkins凭据配置

添加私钥到Jenkins凭据时,要注意这几点:

  • 选择SSH Username with private key类型
  • 用户名填jenkins(因为jenkins/ssh-slave镜像的默认用户就是jenkins)
  • 私钥要完整复制:包括开头的-----BEGIN RSA PRIVATE KEY-----和结尾的-----END RSA PRIVATE KEY-----,不能有遗漏或多余的空格

4. 验证密钥配对

可以在主节点容器里用jenkins用户手动测试SSH连接,确认密钥是否有效:

# 切换到jenkins用户
su jenkins
# 尝试连接slave节点,替换为你的slave IP
ssh jenkins@###.##.#.#

如果能成功连接,说明密钥没问题,再去Jenkins里重新触发代理启动即可。


内容的提问来源于stack exchange,提问作者bot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:31:26