jenkins ssh版本不一致,构建结果不稳定。

背景:

jenkins 节点是centos8

openssh 

ssh -V
OpenSSH_8.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021

jenkins 使用版本 Jenkins 2.338

使用的publish-over-ssh-plugin 版本是1.24(官网最新1.25)


新部署了一个Ubuntu22.04 虚拟机环境

sh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.5, OpenSSL 3.0.2 15 Mar 2022

使用自由风格构建项目

以下是报错信息

13:59:44  打包完成! 下面开始分发jar包
13:59:44 SSH: Connecting from host [Asr-dev]
13:59:44 SSH: Connecting with configuration [branch-dev-node54] ...
13:59:45 SSH: EXEC: completed after 201 ms
13:59:45 SSH: Disconnecting configuration [branch-dev-node54] ...
13:59:45 ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
13:59:45 Build step 'Send build artifacts over SSH' changed build result to UNSTABLE


另一边前端构建时的输出
13:20:18 {"errcode":0,"errmsg":"ok"}SSH: Connecting from host [Asr-dev]
13:20:18 SSH: Connecting with configuration [branch-dev-node54] ...
13:20:19 SSH: EXEC: completed after 201 ms
13:20:19 SSH: Disconnecting configuration [branch-dev-node54] ...
13:20:19 ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]
13:20:19 Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE

排查原因,首先是查看目标节点node54 接收构建物的目录,发现有一个jar包文件。

同时也部署了一个前端构建项目,发现也是能够传到压缩包到目标文件夹下,但就是到该执行sh脚本完成后续部署,戛然而止了。

然后就是惯例 百度,AI大模型咨询,都没什么同样问题。

加上最近开始使用ubuntu22.04系统,发现它对权限各方面都严格些。

所以就想到看来是权限问题了。文件能够传输过去,但是不让jenkins运行Ubuntu上的sh脚本。

开始换搜索关键词,最后找到了 Ubuntu22.04 SSH失败的问题-CSDN博客

解决办法
在Ubuntu 22.04系统上编辑/etc/ssh/sshd_config文件,文末添加如下

vim /etc/ssh/sshd_config
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

 重启下sshd服务。

然后jenkins再次构建,可以顺利完成发布。

附上文心一言对这2个配置的说明:

在SSH连接过程中,HostKeyAlgorithms 和 PubkeyAcceptedAlgorithms 这两个配置项定义了服务器和客户端如何验证对方的身份。增加 ssh-rsa 到这些配置项的列表中,可能是因为在你的环境中,使用 ssh-rsa 算法的密钥是被接受的,或者你的Jenkins节点只支持 ssh-rsa 算法。

以下是这两个配置项的解释:

  1. HostKeyAlgorithms:这个配置项定义了服务器接受的主机密钥算法的列表。默认情况下,新版本的SSH可能只接受基于ECDSA(Elliptic Curve Digital Signature Algorithm)的密钥,而不是RSA。但是,一些旧版本的客户端或特定的安全策略可能只接受RSA密钥。
  2. PubkeyAcceptedAlgorithms:这个配置项定义了客户端可以接受的主机公钥算法的列表。如果你的服务器使用的是RSA密钥,但你的客户端只接受ECDSA密钥,那么连接将会失败。

增加 ssh-rsa 到这些列表中,可能是为了解决兼容性问题。这确保了无论客户端支持哪种算法,都可以与服务器建立连接。

不过,值得注意的是,增加 ssh-rsa 可能会降低连接的安全性,因为RSA密钥的长度通常较短(例如2048位),而ECDSA密钥的长度通常更长(例如4096位)。因此,如果你决定使用RSA,确保你的密钥长度足够长以提供足够的安全性。

后续,暂不采用升级jenkins节点的ssh版本来解决,因为那意味着我还要再改动更多其他节点上的配置,并且也减少其他异常问题的出现。


越做越错,少做少错,不做不错

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值