docker jenkins配置节点报错:/var/jenkins_home/.ssh/known_hosts [SSH] No Known Hosts file was found at /var/

本文详细阐述了如何解决Docker Jenkins在配置SSH节点时遇到的KeyExchange失败问题,包括SSH密钥对生成、known_hosts文件的自动生成和权限设置,确保Jenkins能够正确连接远程主机。

docker jenkins配置节点报错:

在这里插入图片描述

SSHLauncher{host='59.110.171.91', port=22, credentialsId='47519b09-3e72-47d1-ae7c-16148538e2ca', jvmOptions='', javaPath='', prefixStartSlaveCmd='', suffixStartSlaveCmd='', launchTimeoutSeconds=60, maxNumRetries=10, retryWaitTime=15, sshHostKeyVerificationStrategy=hudson.plugins.sshslaves.verifiers.KnownHostsFileKeyVerificationStrategy, tcpNoDelay=true, trackCredentials=true}
[01/05/22 17:50:15] [SSH] Opening SSH connection to 59.110.171.91:22.
/var/jenkins_home/.ssh/known_hosts [SSH] No Known Hosts file was found at /var/jenkins_home/.ssh/known_hosts. Please ensure one is created at this path and that Jenkins can read it.
Key exchange was not finished, connection is closed.
SSH Connection failed with IOException: "Key exchange was not finished, connection is closed.", retrying in 15 seconds. There are 10 more retries left.

解决办法:
ssh-keygen配置证书,三次回车

[root@bogon ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:dOVo3O2Iz9RQ4c/nTdgIjrwznDAUU2S6q/kCS6n8tPs root@bogon
The key's randomart image is:
+---[RSA 2048]----+
|        oo+ . o. |
|         * = +   |
|        + = = o  |
|       o = + * * |
|     .  S + + = *|
|    +    = *   oo|
| . o.o  . * o   o|
|  o....o   o     |
|   .+oEo.        |
+----[SHA256]-----+

ssh连接slave机ip,自动生成known_hosts文件

# 连接slave机ip
[root@bogon ~]# ssh 192.168.111.129
The authenticity of host '192.168.111.129 (192.168.111.129)' can't be established.
ECDSA key fingerprint is SHA256:M5BalHyNXU5W49c5/9iZgC4Hl370O0Wr/c5S/FYFIvw.
ECDSA key fingerprint is MD5:28:23:b8:eb:af:d1:bd:bb:8c:77:e0:01:3c:62:7a:cb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.111.129' (ECDSA) to the list of known hosts.
root@192.168.111.129's password: # 输入登录账户密码
Last login: Wed Jan  5 16:10:37 2022 from bogon

[root@bogon ~]# cd .ssh/
[root@bogon .ssh]# ll
总用量 12
-rw-------. 1 root root 1675 15 16:09 id_rsa
-rw-r--r--. 1 root root  392 15 16:09 id_rsa.pub
-rw-r--r--. 1 root root  177 15 16:10 known_hosts

给known_hosts文件赋予可700权限

[root@bogon .ssh]# chmod 700 known_hosts 
[root@bogon .ssh]# ll
总用量 12
-rw-------. 1 root root 1675 15 16:09 id_rsa
-rw-r--r--. 1 root root  392 15 16:09 id_rsa.pub
-rwx------. 1 root root  177 15 16:10 known_hosts

在挂载的/home/wyt/jenkins_home目录下创建.ssh目录,并设置权限

mkdir /home/wyt/jenkins_home/.ssh
chown -R 1000:1000 /home/wyt/jenkins_home/.ssh

/root/.ssh/known_hosts文件复制到/home/wyt/jenkins_home/.ssh目录下,并设置权限

cp /root/.ssh/known_hosts /home/wyt/jenkins_home/.ssh
chown -R 1000:1000 /home/wyt/jenkins_home/.ssh/known_hosts
docker logs信息如下 INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions? INSTALL WARNING: User: missing rw permissions on JENKINS_HOME: /var/jenkins_home touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
最新发布
08-16
<think>我们正在解决Jenkins容器启动时因权限问题导致的日志错误,具体错误是`/var/jenkins_home Permission denied`。根据之前的知识,这是一个常见的挂载目录权限问题。 原因分析: Jenkins镜像默认使用用户`jenkins`(UID 1000)运行。如果我们将宿主机的目录挂载到容器的`/var/jenkins_home`,而宿主机的目录权限没有给UID 1000足够的权限,就会导致此错误。 解决方案: 1. **修改宿主机目录权限**(推荐) 将宿主机挂载目录的拥有者改为UID 1000(或直接赋予777权限,但不够安全): ```bash # 创建目录(如果不存在) sudo mkdir -p /your/jenkins/home # 更改目录拥有者为UID 1000(注意:宿主机上可能没有jenkins用户,所以直接指定UID) sudo chown -R 1000:1000 /your/jenkins/home # 或者,如果不想改变拥有者,可以赋予所有用户读写执行权限(简单粗暴,但安全性较低) sudo chmod -R 777 /your/jenkins/home # 不推荐在生产环境使用 ``` 2. **在Docker run命令中指定用户**(不推荐,因为Jenkins镜像已经指定了用户) 如果挂载目录在宿主机上属于其他用户,可以尝试在运行容器时指定用户: ```bash docker run -u root ... # 以root用户运行,但会带来安全隐患 ``` 注意:以root运行容器可能会解决权限问题,但会带来安全风险,且Jenkins官方不建议这样做。 3. **使用Docker volume管理数据**(推荐) 使用Docker volume可以避免权限问题,因为volume由Docker管理,会自动设置合适的权限: ```bash # 创建volume docker volume create jenkins-data # 运行容器时使用该volume docker run -d -v jenkins-data:/var/jenkins_home -p 8080:8080 jenkins/jenkins:lts-jdk11 ``` 4. **检查SELinux设置**(如果宿主机启用了SELinux) 在SELinux开启的环境下,即使权限正确也可能被阻止。可以尝试: ```bash # 临时禁用SELinux(不推荐) setenforce 0 # 或者为挂载目录添加SELinux上下文规则 chcon -Rt svirt_sandbox_file_t /your/jenkins/home ``` 5. **使用Docker Compose时的权限设置** 在`docker-compose.yml`中,可以通过指定用户和权限: ```yaml version: '3' services: jenkins: image: jenkins/jenkins:lts-jdk11 user: root # 不推荐,临时解决权限问题 volumes: - /your/jenkins/home:/var/jenkins_home ports: - "8080:8080" ``` 但同样,以root运行不安全。更好的做法是确保宿主机目录权限正确。 步骤总结: 1. 创建挂载目录(如果不存在)。 2. 使用`chown`将目录拥有者改为UID 1000(或使用`chmod`赋予足够权限)。 3. 启动容器。 验证方法: 启动容器后,查看日志: ```bash docker logs <container_name> ``` 如果没有权限错误,且容器状态为`Up`,则问题解决。 相关问题: 1. 如何查看Jenkins容器的日志以排查其他错误? 2. 如何安全地备份Jenkins数据? 3. 在Kubernetes中部署Jenkins时如何避免权限问题? 4. Jenkins容器中默认用户的UID和GID是多少? 5. 如何修改已存在容器的挂载目录权限? 注意:以上方法适用于大多数情况,如果问题仍然存在,请检查挂载目录的父目录权限以及SELinux等安全设置。</think>以下是解决 Jenkins 容器启动时 `/var/jenkins_home Permission denied` 权限错误的完整方案,基于 Docker 官方最佳实践和 Jenkins 容器特性: --- ### 🔧 根本原因分析 Jenkins 官方镜像使用 **UID 1000** 的 `jenkins` 用户运行。当挂载宿主机目录时,若该目录权限与容器用户不匹配,则会出现权限错误: ```bash touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied ``` --- ### ✅ 终极解决方案(分步操作) #### 1️⃣ 创建专用数据目录(推荐) ```bash # 创建目录并设置正确权限 sudo mkdir -p /srv/jenkins sudo chown -R 1000:1000 /srv/jenkins # 关键:匹配容器UID ``` #### 2️⃣ 启动容器时使用正确挂载 ```bash docker run -d \ --name jenkins \ -p 8080:8080 \ -v /srv/jenkins:/var/jenkins_home \ # 使用预配置目录 jenkins/jenkins:lts-jdk11 ``` #### 3️⃣ 若需使用现有目录,修复权限 ```bash # 递归修改所有权 sudo chown -R 1000:1000 /your/existing/path # 或添加组写入权限 sudo chmod -R g+rwx /your/existing/path ``` #### 4️⃣ 紧急情况临时方案(不推荐) ```bash docker run -d \ --name jenkins_temp \ -u root \ # 以root运行(安全风险!) -v /your/path:/var/jenkins_home \ jenkins/jenkins:lts-jdk11 ``` > ⚠️ 仅用于调试,长期使用需回归正常权限[^1] --- ### 🔍 验证步骤 ```bash # 检查目录权限 ls -ld /srv/jenkins # 应显示:drwxr-xr-x 4 1000 1000 ... # 查看容器日志 docker logs --tail 50 jenkins # 成功标志:Jenkins initial setup is required... ``` --- ### 📝 最佳实践总结 1. **专用目录原则** 始终为 Docker 卷创建专用目录,避免与系统文件混杂 2. **权限继承方案** 在 Dockerfile 中预先设置目录权限: ```dockerfile FROM jenkins/jenkins:lts-jdk11 USER root RUN mkdir -p /custom_volume && \ chown -R jenkins:jenkins /custom_volume USER jenkins ``` 3. **SELinux 环境特殊处理** 若宿主机启用 SELinux,添加 `:Z` 标志: ```bash -v /srv/jenkins:/var/jenkins_home:Z ``` --- ### 🧩 相关问题 1. 如何查看 Docker 容器内用户的 UID/GID? 2. Jenkins 容器升级后如何迁移数据卷? 3. 在 Kubernetes 中如何为 Jenkins Pod 配置持久卷权限? 4. 如何通过 Docker Compose 实现自动权限修复? 5. Jenkins 容器日志中 `Can not write to ...` 错误的其他解决方案? > 通过以上方案可彻底解决 99% 的 Jenkins 权限问题。若仍有异常,建议检查磁盘空间、inode 使用量及文件系统类型(如 NFS 需额外配置)[^2]。 [^1]: Docker 官方安全指南:容器应以非 root 用户运行 [^2]: Jenkins 文档:持久化数据卷配置要求
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值