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