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登录到目标机器
于是猜想到问题会不会是出在docker上,我在docker上运行Jenkins镜像时,配置了挂载目录: /data/jenkins_home:/var/jenkins_home(左边为宿主机目录,右边为docker容器目录),会不会是目录挂载问题呢?

最终解决

为了验证上述的猜想,于是我在宿主机的/data/jenkins_hom目录下,重新执行ssh-keygen -trsa -C "" 生成一对公私钥,然后将/data/jenkins_hom/.ssh/id_rsa.pub 拷贝至目标server的.ssh/authorized_keys中,执行结束并保存后,再重新回来Jenkins页面连接时,发现成功脸上
在这里插入图片描述

反思

其实核心还是配ssh免密登录的问题,只不过刚开始时没有配对位置。假如使用源代码安装的话,可能不会存在这个情况,但在使用docker安装时,由于容器运行时,挂载的目录下没有.ssh/*相关的公私钥,自然与目标机器无法连接上(此时目标机器添加的公钥是无法在Jenkins容器运行的目录下找到),所以也就报了相应的异常。所以正确的解法就是,在Jenkins容器运行的目录下,新生成公私钥,然后将生成的公钥copy至目标机器的.ssh/authorized_keys即可

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值