Docker jenkins 使用ssh添加server BapPublisherException

问题现象描述

使用docker安装Jenkins,安装成功后,在添加Publish over SSH插件过后,添加server免密登录时,报了这个异常:jenkins.plugins.publish_over.BapPublisherException: Failed to connect and initialize SSH connection. Message: [Failed to connect session for config [dev-85]. Message [Auth fail]]
添加ssh server Auth fail
已做的工作

  1. Jenkins在宿主机里已挂载目录,服务可正常运行
  2. Jenkins宿主机可以免密登上目标机器(如上图的dev-85机器),关于如何实现ssh免密登录,可自行百度

尝试解决

按理,在ssh配置OK的情况下,不会出现连接不上的情况,遂百度及Google之,找到的无非是这样的
docker jenkins BapPublisherException
在这里插入图片描述
点了好几个链接,进去后发现解决方案都很雷同,也就是说,免密登录的配置没配置好,什么Jenkins所在机器的公钥没有配置在目标机器的.ssh/authorized_keys中。很明显,我是已经配置好了,也已经可以免密ssh登录到目标机器
于是

你遇到的错误: ``` jenkins.plugins.publish_over.BapPublisherException: Failed to read file - filename [/data/password/wmclick.pem] (relative to JENKINS_HOME if not absolute). Message: [/data/password/wmclick.pem] ``` 表示 Jenkins 插件(如 `Publish Over SSH` 插件)在尝试读取指定的私钥文件 `/data/password/wmclick.pem` 时失败。常见原因包括: - 文件路径不正确; - Jenkins 没有权限读取该文件; - 文件不存在; - Jenkins 运行环境与你预期的文件系统路径不一致(如运行在 Docker 容器中)。 --- ## ✅ 解决方案 ### ✅ 1. 确认文件路径是否正确 #### 如果使用的是**绝对路径** 确保该路径在 Jenkins 所在的服务器上真实存在: ```bash ls -l /data/password/wmclick.pem ``` 如果文件不存在,请将文件拷贝到该路径,或使用正确的路径。 #### 如果使用的是**相对路径** 相对路径是相对于 `JENKINS_HOME` 的,比如: ``` password/wmclick.pem ``` 那么 Jenkins 会尝试读取: ``` $JENKINS_HOME/password/wmclick.pem ``` 你可以通过 Jenkins 的系统信息页面(`Manage Jenkins > System Information`)查看 `JENKINS_HOME` 的值。 --- ### ✅ 2. 确保 Jenkins 有权限读取该文件 执行以下命令: ```bash ls -l /data/password/wmclick.pem ``` 输出示例: ``` -rw------- 1 jenkins jenkins 1675 Apr 5 10:00 /data/password/wmclick.pem ``` 确保文件的所有者是 Jenkins 使用的用户(如 `jenkins`)。如果不是,执行: ```bash sudo chown jenkins:jenkins /data/password/wmclick.pem ``` 同时确保权限不要太宽松(如不要 `chmod 777`): ```bash chmod 600 /data/password/wmclick.pem ``` --- ### ✅ 3. Jenkins 运行在 Docker 容器中? 如果你的 Jenkins 是通过 Docker 启动的,你需要将宿主机上的私钥目录挂载进容器: ```bash docker run -d \ -v /data/password:/data/password \ -p 8080:8080 \ jenkins/jenkins:lts ``` 这样容器内部就可以访问 `/data/password/wmclick.pem`。 --- ### ✅ 4. 在 JenkinsSSH 插件中正确配置私钥路径 进入 Jenkins 的: ``` Manage Jenkins > Configure System > Publish over SSH ``` 在 `Key` 字段中填写: - 绝对路径:`/data/password/wmclick.pem` - 或相对路径:`password/wmclick.pem`(前提是文件在 `$JENKINS_HOME/password/` 下) --- ## ✅ 示例:使用绝对路径配置 SSH 插件 ``` Publish over SSH 配置: - Name: my-ssh-server - Hostname: 192.168.1.100 - Username: ubuntu - Remote Directory: /home/ubuntu/app - Use password authentication?: ❌(不勾选) - Key: /data/password/wmclick.pem ``` --- ## ✅ 补充建议 - **不要将私钥放在 Jenkins 的 workspace 目录中**,因为 workspace 是每个 job 的独立目录,不适合存放全局配置文件。 - **推荐使用相对路径 + 放在 Jenkins Home 下**,便于维护和迁移。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值