Linux|编译最新版的openssh-server-9.3的rpm包(一)

news/2024/7/9 21:31:05 标签: linux, ssh, 服务器, postgresql, 开发语言

前言:

openssh服务的重要性不需要在这里废话了,而面对各种系统漏洞服务漏洞,我们最好的应对手段就是升级了,因此,我们的服务器很可能有升级内核的需求,以及升级系统内的重要服务的需求,而作为与服务器交互的服务sshd来说,漏洞也是非常多的,但该服务是基础服务,是不可能停止的,因此,我们需要升级它。

那么,如果只是单独的几个服务器,使用的是带有漏洞的低版本的sshd服务,手动的编译安装将该服务升级是可以实现的(通常,手工编译一个sshd服务也就最多半小时,包括测试环节),而如果有若干个服务器都需要升级,那么,显然手动编译升级的方式是不太现实的,太耗时费力了。

因此,在有大量的同一操作系统的服务器的情况下,显然编译一个适用于自身情况的sshd服务安装rpm包是比较合适的,可以节约大量的编译时间(一次编译,到处运行),并且可以结合脚本进行批量部署,从而提升运维的效率。

那么,本文将就如何在centos7下编译一个可用于centos7,升级sshd服务到最新版本的9.3做一个示例演示。

示例服务器的系统版本:

[root@k8s-node2 x86_64]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 

####注:编译出来的rpm包适用于所有centos7或者redhat7以及等同于centos7的欧拉操作系统 

一,

创建相关目录

这些目录主要是存放源码包和编译出来的rpm包

[root@k8s-node2 ~]# mkdir -p /root/rpmbuild/SOURCES
[root@k8s-node2 ~]# mkdir -p /root/rpmbuild/SPECS
[root@k8s-node2 ~]# cp openssh-9.3p1.tar.gz   /root/rpmbuild/SOURCES/

二,

制作rpm的准备工作

#安装必要的包,关键的包是rpm-build, 其它的是依赖
  yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip libXt-devel imake gtk2-devel -y

#解压tar包
  cd /root/rpmbuild/SOURCES/
  wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz
  tar -zxf openssh-9.3p1.tar.gz 
#复制出官方提供的spec文件,rpm-build需要根据这个文件来制作rpm包
  cp openssh-9.3p1/contrib/redhat/openssh.spec .
#关掉no_gnome_askpass no_x11_askpass这两个参数
  sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" openssh.spec
  sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" openssh.spec

三,

开始rpm包的制作

主要命令是:

rpmbuild -ba openssh.spec

###由于编译工作可能会有非常多的错误,因此,本次编译工作使用试错法,也就是直接开始,有错就解决,直到编译工作完成。

####下面对编译中的错误做一个总结

错误1:

[root@k8s-node2 SOURCES]# rpmbuild -ba openssh.spec
error: File /root/rpmbuild/SOURCES/x11-ssh-askpass-1.2.4.1.tar.gz: No such file or directory

两个方案任选一个即可 

解决方案1:

请前往网址:

https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/

下载tar包然后手动上传到/root/rpmbuild/SOURCES/就可以了

不用wget的原因是wget下载的tar包在rpmbuild执行时解压会报错,下载后tar -zxf无法执行,只能手动下载然后上传

解决方案2:

屏蔽掉askpass,但还是需要下载x11-ssh-askpass-1.2.4.1.tar.gz在当前目录

sed -i -e "s/%global no_x11_askpass 0/%global no_x11_askpass 1/g" openssh.spec
wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz

错误2:

openssl开发包版本过高

[root@k8s-node2 SOURCES]# rpmbuild -ba openssh.spec
error: Failed build dependencies:
	openssl-devel < 1.1 is needed by openssh-9.3p1-1.el7.centos.x86_64

经检查,确实openssl的开发包版本过高,但卸载该包将会引起一些不必要的麻烦(openssl是一个比较重要的内置软件) 

[root@k8s-node2 SOURCES]# rpm -qa |grep openssl
openssl-libs-1.0.2k-8.el7.x86_64
openssl-1.0.2k-8.el7.x86_64
xmlsec1-openssl-1.2.20-5.el7.x86_64
openssl-devel-1.0.2k-8.el7.x86_64

解决方案:

编译前忽略openssl开发包的检查,也就是注释检查行

sed -i '/openssl-devel < 1.1/s/^/#/' openssh.spec

编译是比较快的啊,啪的一下就好了,编译出来的rpm包在以下目录,以下rpm包拿到其它同操作系统的服务器就可以愉快的安装使用了:

[root@k8s-node2 SOURCES]# cd ../RPMS/x86_64/
[root@k8s-node2 x86_64]# ls
openssh-9.3p1-1.el7.centos.x86_64.rpm                openssh-clients-9.3p1-1.el7.centos.x86_64.rpm    openssh-server-9.3p1-1.el7.centos.x86_64.rpm
openssh-askpass-gnome-9.3p1-1.el7.centos.x86_64.rpm  openssh-debuginfo-9.3p1-1.el7.centos.x86_64.rpm

正常的编译输出,尾部如下:

。。。。。。。。前面的略略略。。。。。。。。。。。
bpango-1.0.so.0()(64bit) libpangocairo-1.0.so.0()(64bit) libpangoft2-1.0.so.0()(64bit) libpthread.so.0()(64bit) rtld(GNU_HASH)
Obsoletes: ssh-extras
Processing files: openssh-debuginfo-9.3p1-1.el7.centos.x86_64
Provides: openssh-debuginfo = 9.3p1-1.el7.centos openssh-debuginfo(x86-64) = 9.3p1-1.el7.centos
Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/openssh-9.3p1-1.el7.centos.x86_64
Wrote: /root/rpmbuild/SRPMS/openssh-9.3p1-1.el7.centos.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-9.3p1-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-clients-9.3p1-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-server-9.3p1-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-askpass-gnome-9.3p1-1.el7.centos.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-9.3p1-1.el7.centos.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.JgTTnt
+ umask 022
+ cd /root/rpmbuild/BUILD
+ cd openssh-9.3p1
+ rm -rf /root/rpmbuild/BUILDROOT/openssh-9.3p1-1.el7.centos.x86_64
+ exit 0


http://www.niftyadmin.cn/n/444350.html

相关文章

(十)异步-委托异步调用(4)

一、委托异步执行 当委托对象被调用时&#xff0c;它调用其调用列表中包含的方法。这是同步完成的。 如果委托对象在调用列表中只有一个方法&#xff08;引用方法&#xff09;&#xff0c;它就可以异步执行这个方法。委托类有两个方法&#xff0c;叫作 BeginInvoke 和 EndInv…

Docker 基本管理整理

一 容器基础相关 为什么要使用容器 容器是什么&#xff1f; 容器其实就是一个进程&#xff0c;是将一整套应用程序所需运行的软件及其运行环境进行打包封装在一个容器里面&#xff0c;每个容器之间有自己独立的运行环境&#xff0c;相互之间互不干扰。 例如一个服务上运行一个…

Ubuntu中root用户和user用户的相互切换

Ubuntu是最近很流行的一款Linux系统&#xff0c;因为Ubuntu默认是不启动root用户&#xff0c;现在介绍如何进入root的方法。 &#xff08;1&#xff09;从user用户切换到root用户 不管是用图形模式登录Ubuntu&#xff0c;还是命令行模式登录&#xff0c;我们会发现缺省的用户是…

tiflash引擎的使用小总结

作者&#xff1a; sustyle 原文来源&#xff1a; https://tidb.net/blog/50baeeb8 1 背景 我们公司有一种特殊的数据分析场景&#xff0c;大数据部门会定期抽取业务数据进行分析然后T1更新报表。这个抽数任务经常会影响业务的正常访问。经过调研后发现tiflash可以解决这种场…

PHP+SQL公共课平时成绩查询系统(源代码+论文+答辩PPT)

众所周知,现代信息技术是现代教育技术的基础和核心,培养和创新型的人才必须依靠现代教育技术。从这一层意义上讲,我们说掌握一定的计算机应用技能已经成为国家未来的合格建设者的必备素质,所以现在在大学中对非计算机系的学生开设了计算机文化基础课,并且通过这门课的学习…

前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈

前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈 &#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13085 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- 分享 ref: 设置一个唯一ref contentHeight&#xff…

AIGC提示(prompt)工程之开宗明义篇

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

32908字长文理解Large Vision Model:Segment Anything

作者:猛码Memmat 目录 Abstract1. IntroductionTaskModelData engineDatasetResponsible AIExperimentsRelease2. Segment Anything TaskTaskPre-trainingZero-shot transferRelated tasksDiscussion3. Segment Anything Model