![为什么我在设置 ssh-slave Docker 镜像时收到错误“服务器拒绝了 1 个私钥”](https://linux22.com/image/1582222/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E5%9C%A8%E8%AE%BE%E7%BD%AE%20ssh-slave%20Docker%20%E9%95%9C%E5%83%8F%E6%97%B6%E6%94%B6%E5%88%B0%E9%94%99%E8%AF%AF%E2%80%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%8B%92%E7%BB%9D%E4%BA%86%201%20%E4%B8%AA%E7%A7%81%E9%92%A5%E2%80%9D.png)
我在 Ubuntu 上使用 jenkins/jenkins:lts 和 jenkins/ssh-slave 镜像将 Jenkins 主服务器和从服务器作为 Docker 容器运行。步骤如下:
ssh-keygen
在 jenkins-master 容器内运行(docker exec -it container_id bash
)以生成 ssh 密钥- 使用 dockerfile 将生成的公钥添加到 ssh-slave 容器内的 authorized_keys 文件中
- 按照此操作在 Jenkins 凭证中添加私钥关联
我在 Stack Overflow 上查看了许多与此问题相关的问题,但仍然遇到以下错误:
[02/08/19 20:31:06] [SSH] 打开与 ###.##.#.#:22 的 SSH 连接。 [02/08/19 20:31:06] [SSH] SSH 主机密钥与已知主机文件中的密钥匹配。将允许连接。 错误:服务器拒绝了 jenkins 的 1 个私钥(credentialId:worker-ssh/method:publickey) [02/08/19 20:31:06] [SSH] 身份验证失败。 身份验证失败。 [02/08/19 20:31:06] 启动失败 - 正在清理连接 [02/08/19 20:31:06] [SSH] 连接已关闭。
Jenkins中的从属模板:
姓名:詹金斯工人
用法:尽可能使用此节点
发射方法:通过 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
答案1
chmod 744 on .ssh/authorized_keys
我认为这很糟糕。如果权限太开放,ssh 将不会使用文件中的密钥。
更改权限为600。rw-------
permissions of 744 == rwxr-xr-x == read permissions for world and group
permissions of 600 == rw------- == read/write permissions for owner user only