如何编译打包OpenSSH 9.4并实现批量升级

news2024/11/26 12:48:24

1 介绍

openssh 9.4版本已于8月10号发布,安全团队又催着要赶紧升级环境里的ssh版本,本文主要介绍Centos5、Centos6、Centos7下openssh 9.4源码编译rpm包以及批量升级服务器openssh版本的方法。关注公众号后台回复ssh可获取本文相关源码文件。

https://www.openssh.com/releasenotes.html

2 将源码编译为rpm包

2.1 编译脚本介绍

由于openssh官方只提供源码包,网上下载的rpm包有可能遇到各种依赖问题,因此我们选择自己将源码编译为rpm包来升级环境的openssh。当然编译过程也尽量简单化,这里我们直接使用开源的脚本进行编译。

https://github.com/boypt/openssh-rpms

编译需要涉及到很多开发软件的下载安装,建议使用一台虚拟机来进行操作。先下载编译脚本,解压

[root@etcd-1 ~]# wget https://github.com/boypt/openssh-rpms/archive/refs/heads/main.zip
[root@etcd-1 ~]# unzip main.zip
[root@etcd-1 ~]# cd openssh-rpms-main/

简单看下代码结构

  • compile.sh:编译脚本

  • el5、el6、el7:对应CentOS5、6、7三个系统,编译相关的参数由SPECS目录下的openssh.spec控制。编译好的rpm包放在RPMS目录下。

  • pullsrc.sh:openssh相关源码下载脚本

  • version.env:定义了openssh及openssl源码的版本信息

图片

2.2 修改代码

先修改一下pullsrc.sh脚本,给wget添加上"--no-check-certificate"参数,否则可能因为证书问题导致源码下载失败。

图片

另外默认openssh源码中是没有ssh-copy-id相关参数的,如果直接编译安装,会发现安装后没有ssh-copy-id命令,因此如果需要用到该命令,需要修改编译参数控制文件openssh.spec。本次要升级的环境为CentOS7,因此我只修改el7目录下的SPECS/openssh.speec文件,在如下位置添加一行。

install -m755 contrib/ssh-copy-id $RPM_BUILD_ROOT/usr/bin/ssh-copy-id

图片

继续修改el7目录下的SPECS/openssh.speec文件,在如下位置添加一行。

%attr(0755,root,root) %{_bindir}/ssh-copy-id

图片

2.3 准备编译环境

[root@etcd-1 openssh-rpms-main]# yum groupinstall -y "Development Tools"
[root@etcd-1 openssh-rpms-main]# yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel

2.4 拉取源码并编译打包

[root@etcd-1 openssh-rpms-main]# bash pullsrc.sh ##拉去源码包

执行完成后检查下download目录,相关的源码包是否已下载好,服务器没有网络,可以从下面的链接直接下载好传到download目录下。

https://www.openssl.org/source//openssl-1.1.1v.tar.gz

https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz

图片

执行源码打包脚本

[root@etcd-1 openssh-rpms-main]# bash compile.sh

编译完成检查编译是否成功

图片

检查rpm包是否都以打包好

图片

3 批量升级服务器openssh版本至9.4

3.1 脚本介绍

脚本会用到ansible,因此执行脚本的服务器上需要安装ansible。获取到脚本后,先解压

[root@172-20-17-60 ~]# tar xvf ssh_9.4.tar.gz
[root@172-20-17-60 ~]# cd ssh_9.4

脚本主要文件如下

  • hosts: ansible主机清单文件,填写待升级ssh版本的服务器ip及用户名密码

  • rpms:存放待升级的openssh相关的rpm包。可以将前面编译好的openssh包放入该路径下

  • ssh_update.sh:ssh升级脚本,将会推送到各个服务器

  • ssh_update.yaml:升级时ansible使用的playbook

  • update_ssh.sh:主脚本,通过该脚本来执行ansible的playbook

图片

3.2 自定待升级服务器信息

node1为主机组,主机组下填写服务器ip,服务器用户名密码相同的,可以填在一起

  • ansible_user:填写用户名

  • ansible_ssh_pass:填写登录密码

如果用其它用户名或密码不同的服务器,可以填写到主机组node2下,并可新增其它主机组

图片

3.3 执行脚本,开始升级openssh版本

[root@172-20-17-60 ssh_9.4]# bash update_ssh.sh

检查ssh版本是否已升级完成

图片

服务上检查openssh是否成功升级到9.4版本

图片

检查ssh是否能正常登录到服务器

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/940956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正则的匹配原理以及优化原则

正则之所以能够处理复杂文本,就是因为采用了有穷状态自动机(finite automaton)。那什么是有穷自动机呢?有穷状态是指一个系统具有有穷个状态,不同的状态代表不同的意义。自动机是指系统可以根据相应的条件,…

朋友圈也可以定时定量发送?

场景1:明天要搞活动,早中晚都得发朋友圈,一天要发3次朋友圈,要在手机上定好3个闹钟,这是一件非常麻烦的事。 场景2:有朋友是房产信息的,每天要发布很多二手房源,手动发圈太耗时间&a…

Eziriz .NET Reactor crack,代码中调用许可系统

Eziriz .NET Reactor crack,代码中调用许可系统 .NET reactor被描述为软件许可程序以及在.NET和程序集框架中编写的应用程序的安全代码。它是非常强大的代码保护以及软件系统的许可。无论用户在为.NET的Microsoft框架编译程序的过程中执行什么,该程序都可以向用户提…

[MyBatis系列⑥]注解开发

🍃作者简介:准大三本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐MyBatis系列①:增删改查 ⭐MyBatis系列②:两种Dao开发方式 ⭐MyBatis系列③:动态SQL ⭐MyBatis系列④:核心…

全新版本QStack云管系统3.5.3 附详细安装教程

源码介绍: QStack云管系统3.5.3,全新版本下载安装包详细搭建教程。 涵盖了服务器、云主机、代理IP等多种云产品管理运维和安全存储。 同时,QStack还支持对接运营众多公有云厂商产品资源,满足不同用户的需求。 通过开放API和插…

(java)进程和线程的联系和区别

目录 进程 1.进程具有独立性 ———— 虚拟地址空间 线程 为什么要引入多个线程? 多线程注意点 ⁜⁜总结:线程和进程的区别和联系⁜⁜ 进程 1.进程具有独立性 首先介绍一下 ———— 虚拟地址空间 在这之前还要了解一下 —— “物理内存”…

接口自动化测试攻略,必看!

为什么要做接口自动化 相对于UI自动化而言,接口自动化具有更大的价值。 为了优化转化路径或者提升用户体验,APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化,导致自动化的代码频繁变更,没有起到减少工作量的效果。 而…

VS Code内存占用过高 - 解决方案

前言 使用VS Code时,其占用的内存可能会急剧增加,从而增加计算机内存的压力,下文介绍如何减少VS Code的内存占用。 通过此方案,本人从3G的内存占用降到了700M的内存占用。 解决方案 打开VS Code的设置,如下图&…

Keepalived(二)

实验一 KeepalivedLvsNginx 实现高可用集群,保证nginx服务正常运行 系统centos7 IP主机名作用192.168.28.141/24klmaster配置Keepalived(Master)、配置LVS,作为负载均衡器192.168.28.143/24klbackup配置Keepalived(…

数据分析 | 特征重要性分析 | 树模型、SHAP值法

前言 在分析特征重要性的时候,相关性分析和主成分分析往往是比较简单的方法,相关性分析是通过计算特征与目标变量之间的相关系数来评估特征的重要性。它可以告诉我们特征和目标变量之间的线性关系程度,但对于非线性关系就无能为力了&#xff…

微前端:重塑大型项目的前沿技术

引言 随着互联网技术的飞速发展,前端开发已经从简单的页面制作逐渐转变为复杂的应用开发。在这个过程中,传统的前端开发模式已经难以满足大型项目的需求。微前端作为一种新的前端架构模式,应运而生,它旨在解决大型项目中的前端开…

C语言基础语法——数据类型

数据类型介绍 数据类型:数据所属的类型 数据类型的作用:编译器预算数据分配的内存空间大小 变量 变量的语法 在计算机程序中,变量是用来存储数据的一个内存区域,并用一个名字来表示这个区域。 在程序运行过程中&#xff0…

Android事件分发

Android事件分发是指触摸屏幕的事件分发,在手指触摸屏幕后所产生的一系列事件中,典型的事件类型有如下几种: MotionEvent.ACTION_DOWN ——手指刚接触屏幕MotionEvent.ACTION_MOVE——手指在屏幕上面滑动MotionEvent.ACTION_UP——手指从屏幕上松开的一…

C语言每日一题 ----计算日期到天数转换(Day 2)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C语言天天练 &#x…

m3u8 blob视频免费下载

F12点开找到这个视频url最后是.m3u8结尾 http://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html 在上边的网址转Mp4下载即可

HBase集群环境搭建与测试

🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 个人主页:beixi 本文章收录于专栏(点击传送):【大数据学习】 💓💓持续更新中,感谢各位前辈朋友们支持…

【第四阶段】kotlin语言的List创建与元素获取

1.list创建 val list listOf("jave","kotlin","c","c")2.list集合获取的三种方式 开发过程中尽量使用getOrElse()或者getOrNull,因为他可以防止崩溃取值 package Stage4fun main() {//list 创建val list listOf("jav…

m4s格式转换mp4

先安装 ffmpeg,具体从官网可以查到,https://ffmpeg.org,按流程走。 转换代码如下,可以任意选择格式导出 import subprocess import osdef merge_audio_video(input_audio_path, input_video_path, output_mp4_path):# 构建 FFmpe…

ViT论文Pytorch代码解读

ViT论文代码实现 论文地址:https://arxiv.org/abs/2010.11929 Pytorch代码地址:https://github.com/lucidrains/vit-pytorch ViT结构图 调用代码 import torch from vit_pytorch import ViTdef test():v ViT(image_size 256, patch_size 32, num_cl…

【第四阶段】kotlin语言可变list集合

1.可变list集合 完整写法 var list:MutableList<String> mutableListOf<String>("java","kotlin","c","c") 省略写法 var list mutableListOf("java","kotlin","c","c")fun ma…