安全扫描要求屏蔽ssh版本信息,也就是说在你ssh -V的时候,不能够显示ssh的版本信息,我之后在网上查找了一些资料,都说需要使用tar包安装ssh,并在解压之后修改sshd.c文件,将version部分进行修

改,我这个项目中有700多台设备,所以需要使用rpm包,之后通过脚本来进行升级ssh的操作。

那如何将tar包变成rpm包呢,使用rpmbuild工具是可以将tar包编译成rpm包的,但我没这么做,我从rhn上下载了ssh的src.rpm包,我觉得这个更可靠,毕竟是redhat发布的,并且这个ssh包的版本也符合安

全整改的要求。

我之后下载了openssh-5.3p1-114.el6_7.src.rpm,之后步骤如下:

step1:rpm -ivh 安装src.rpm

rpm -ivh openssh-5.3p1-114.el6_7.src.rpm

step2:安装rpmbuild的环境

yum install compat-gcc* gcc* rpm-build rpm-devel rpm-libs 其他包忘了,可以在网上找相应的文章

step3:第一步之后会在/root下生成一个rpmbuild目录,自动创建几个目录,你也不用手动创建其他的目录,因为你在编译的过程中rpmbuild会自动创建齐全如下6个目录:

BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

BUILD和BUILDROOT是编译过程中需要的目录,其中BUILDROOT是中间过程目录

RPMS是编译完成后生成的rpm包的存放地址

SOURCES是编译过程在自动解压后,存放解压文件的目录

SPECS目录很重要,是你制作或修改spec文件的存放目录

SRPMS是存放.src.rpm文件的目录

关于这些目录和rpmbuild的工作原理,这里就不详细说了,具体可以参考网上其他文章

step4:修改spec文件===这步是重点,本文会详细描述。在修改过程中遇到了几个问题,一并记录如下。

############################################

【spec中各主要部分说明如下】

%pre和%setup和%patch    -bp  解压tar包,并应用补丁

%setup通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。

%build            -bc  build。等于tar包的make===在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make的工作

%configure     执行源代码的configure配置在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行

%instal            -bi  make install===在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make install的操作

-bb 是构建一个binary包;===执行了所有过程

-ba 是构建一个binary包和一个source包===执行了所有过程

%files 定义那些文件或目录会放入rpm中

%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755

bp=tar+copy

bc=configure+make

bi=make install

%file是将所有的文件、包都做成rpm形式

bb=bp+bc+bi

ba=bp+bc+bi+bb

############################################

我最初的设想是这样的:

先执行-bp,将源码解压到BUILD目录

之后修改sshd.c

之后修改spec文件,注释掉%pre、%setup、%patch部分

之后执行-bb,因为-bb包括了-bp/-bc/-bi等步骤,所以之前注释掉%pre,%setup,%patch部分后就会使用修改后的sshd.c文件来执行%build步骤、%configure步骤和%instal、%file步骤了

后来发现rpmbuild -bb或-ba都不行,因为bb=bp+bc+bi,ba更狠,还加上了bb,这个过程会将你之前解压出来的修改后的sshd.c给覆盖掉======【这也是这篇文章要解决的核心问题】

后来我又想,有没有什么参数,可以跳过-bb和-ba过程中的bp、bc步骤呢,也就是这样:

首先我用-bp解压,并将解压后的各种文件拷贝到相关目录(自动的进行),例如spec文件拷贝到SPEC目录,其他文件拷贝到BUILD目录或者SOURCE===执行rpm -ivh ssh.src.rpm即可

之后修改sshd.c文件

之后修改iaspec文件

之后用某个特殊的参数执行rpmbuild -bb或-ba,让-bb或-ba跳过解压和configure、make步骤,后来发现,根本不好使。

是有2个参数,--nobuild和--short-circuit,命令如下:rpmbuild -bb spec --nobuild;或者rpmbuild --short-circuit -bi spec,但结果不行

之后我又查看了一下rpmbuild文档,上边说rpmbuild的过程支持使用脚本,这是个大好消息!!!这样就可以在spec文件中调用脚本了,问题解决了。如下:

########################

%prep段

这个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面的%build,%install段一样,除了可以执行RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令

,命令可以有很多行,如我们常写的tar解包命令。

########################

我在%configure 行的前边添加了如下两行:

sed -i s#'snprintf(buf, sizeof buf, "SSH-%d.%d-%.100s%s", major, minor,'#'snprintf(buf, sizeof buf, "goodbye");'#g sshd.c

sed -i '/(options.show_patchlevel == 1) ? SSH_VENDOR_PATCHLEVEL : SSH_VERSION, newline);/ d' sshd.c

之后会执行step5

step5:rpmbuild -ba openssh.spec

step6:之后到RPMS目录,就可以yum localinstall openssh-5.3p1-114.el6.x86_64.rpm

注意:会编译出很多包,如下,可以都一起安装,也可以只安装ssh

[root@scd1 x86_64]# ls

openssh-5.3p1-114.el6.x86_64.rpm            openssh-ldap-5.3p1-114.el6.x86_64.rpm

openssh-askpass-5.3p1-114.el6.x86_64.rpm    openssh-server-5.3p1-114.el6.x86_64.rpm

openssh-clients-5.3p1-114.el6.x86_64.rpm    pam_ssh_agent_auth-0.9.3-114.el6.x86_64.rpm

openssh-debuginfo-5.3p1-114.el6.x86_64.rpm

安装更新完毕,我又在另一个节点上"ssh -V 更新ssh的节点ip"   试了一下,发现还是有版本信息,可见,网上的这种方法不行,不能屏蔽ssh版本信息,但确实解决了rpmbuild过程修改软件内容这一问题。

转载于:https://blog.51cto.com/hashing123/2162197

rhel6编译ssh的src.rpm包并修改spec参数相关推荐

  1. linux 编译src.rpm,CentOS6.5下编译src.rpm包的内核

    CentOS6.5原生内核版本是 Linux 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_6 ...

  2. mysql src.rpm_从.src.rpm包中提取出完整的源码的方法

    1 什么是完整的源码 就是说,最初始的源码加上打了所有的patch后的源码,即最新的源码. 2 过程 2.1 从.src.rpm中提取完整的rpm工程文件 2.1.1 rpm to cpio rpm2 ...

  3. 提取原rpm包里的SPEC文件及重新打包

    一.概要 目的是要修改原rsyslog rpm包的systemd rsyslog.service文件,添加一行"ExecStartPre=/bin/bash -c "/usr/bi ...

  4. 编译OpenSSH8.4的RPM包及升级

    目录 一.安装相关依赖包 二.创建rpmbuild目录并下载源码 三.打包及排错 四.升级到OpenSSH 8.4p1 以下是打包好的OpenSSH 8.4p1,包括7个rpm包,欢迎下载使用. Op ...

  5. 解决编译nginx模块与rpm包安装的nginx不兼容问题

    环境:centos  nginx-10.0.1 现象: 自己开发一个nginx模块,放到rpm包安装的nginx服务器上启动服务时报错如下: 30490#0: module "/usr/li ...

  6. mysql rpm 日志_mysql5.1.48-1的src.rpm包安装日志(一)

    对linux的菜鸟我来说,装上这个有难度,特意记下来. 安装的系统是centos.升级到最高版本2.6.34,但是没成功,还没找原因. root@localhost lost+found)#rpm - ...

  7. linux4.9编译内核,centos编译linux-4.9内核rpm包

    实际环境中,有时需要用到某个版本的linux内核,但这个版本的内核并没有rpm包,这时我们就需要编译linux内核rpm包.本文介绍在centos6下编译linux-4.9版本内核rpm包,以linu ...

  8. RPM包制作之Spec文件详解

    看这篇文章的人基本都有一个想法,就是:"劳资不想用YUM的安装!不是版本太低就是文件分布太野路子",此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包 ...

  9. linux安装spec编译器,RPM包制作之Spec文件参数详解

    看这篇文章的人基本都有一个想法,就是:"劳资不想用YUM的安装!不是版本太低就是文件分布太野路子",此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包 ...

最新文章

  1. 大数据时代,一名优秀的开发者应具备怎样的特质?
  2. zzuli 2269:minval
  3. MySQL 高级- case结构
  4. (十一)开发环境【不会这些,你就会被认定是菜鸟小白,没做过项目】
  5. Day5:python之函数(3)
  6. Kafka常用命令之kafka-console-consumer.sh
  7. PKMS的queryIntentActivities分析
  8. Centos 6.5安装python3.5.1
  9. 雷电模拟器配置文件参数解读
  10. krpano默认皮肤详解
  11. Bezier和B样条曲线
  12. Arch Linux 下安装 st (终端模拟器)
  13. ionic安卓打印终极解决方案,支持USB打印
  14. java公路车为什么会被喷,最全指南
  15. MFC中改变按钮颜色的方法
  16. linux 关闭浏览器,在Linux和Windows下关闭谷歌Chrome浏览器中的通知提醒的方法
  17. 多个excel文件不在一个视图里分开独立显示
  18. 网络钓鱼常用手段大揭秘,超级科技教你如何防范
  19. 263Echarts - 3D 折线图(三维折线图正交投影)
  20. mysql源码下载地址

热门文章

  1. python 遍历字典
  2. Bootstrap 基本模板
  3. 统计学习导论 Chapter2--What Is Statistical Learning?
  4. jstatd,VisualVM使用和报错解决:Could not create remote object--java.security.AccessControlException
  5. Debian/Ubuntu 报错解决:-bash: ifconfig: command not found
  6. Apache的管理及优化web
  7. 计算机 微课 论文,探析毕业论文怎么写 关于微课和电脑论文范例30000字
  8. php5中魔术方法函数有哪几个,php中的类魔术方法有哪些
  9. java面向对象思维导图_2020年Java进阶架构师的必备思维导图,让你少走弯路!
  10. jpa SessionFactory事物失效