RedHat5 升级OpenSSH服务

需求:漏洞整改涉及到升级OpenSSH服务,服务器在内网无法使用yum源等。由于是生产环境,不可随便尝试,以下内容是在本地虚拟机模拟多遍后总结的,当然最终生产环境服务器SSH也升级成功。
一起来见证那些踩过的坑!!!

操作权限:使用root进行操作应该是没有悬念。 操作方式:使用源码编译安装,想偷懒使用rpm包安装,可是找不到合适的包和合适的教程。

准备

  • 下载OpenSSH当前最新版7.3p1
    官网:http://www.openssh.com/
    英文不好,第一次访问并未顺利找到源码包的下载地址。在左侧找到其中的For other OS's找到Linux点进去再往下拉找到,找一个合适的下载空间进去下载最新版即可。
    这里直接提供一个版本下载链接:openssh-7.3p1.tar.gz
  • 由于系统比较老,很多缺省的软件包需要更新或者新装,在下面的教程安装中再一步步说明

配置与安装

解压

tar -zxvf openssh-7.3p1.tar.gz
cd openssh-7.3p1

编译安装目录

pwd

openssh-doc 这就是我本机的安装目录/root/UpdateSSH/openssh-7.3p1,以后每一次编译均在此目录下完成,下面脚本中./configure之前均需要cd /root/UpdateSSH/openssh-7.3p1

编译

这里是根据经验使用一下编译配置

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

以前还会加上--with-pam后来发现新版并不需要此配置,如果加上还要安装对应的依赖包,所以干脆不要了,省的麻烦。
**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See 'config.log' for more details.

问题很明显,没有gcc,如果网络正常肯定立马yum install gcc修复此问题。
可惜服务器无法使用公网,最直接的解决办法是找到安装盘找到对应的RPM安装包和依赖包(我本机是使用如下脚本安装,注意安装顺序)

rpm -Uvh kernel-headers-2.6.18-164.el5.i386.rpm
rpm -Uvh glibc-headers-2.5-42.i386.rpm
rpm -Uvh glibc-devel-2.5-42.i386.rpm
rpm -Uvh libgomp-4.4.0-6.el5.i386.rpm
rpm -Uvh gcc-4.1.2-46.el5.i386.rpm

这里需要说明一点为什么需要安装以上包,因为我们首先想到的是安装gcc,可以安装过程会报错
install-gcc-rpm gcc
可以根据报错信息找到依赖关系。 没有安装盘的可以使用其他可以上网设备将RPM包事先下好,可以访问镜像站寻找下载,这里采用此方式获取RPM安装包。
本次测试环境是RedHat,而镜像源没有,暂且使用CentOS
首先你需要确认你的系统是什么版本,根据对应的版本下载安装包

lsb_release -a

redhat-version Version
这里测试机的版本5.4,所以下载的包中应该是包含el5
继续在终端查询操作系统位数

getconf LONG_BIT

这里查出来系统位数为32位,所以下载的包中应该是包含i386 所以对应在这里下载包。
这时坑出现了,镜像站只提供最新版5.11对应的rpm包,而我此处的系统版本为5.4如果下载下来的包安装需要把所有的依赖关系的包全部更新(我个人认为这样相当于把系统更新)
还是直接在安装包IOS文件中找对应的RPM包比较实际
我这里采用的是直接在安装盘找到对应rpm包安装。(如果服务器存储空间足够每次在新装机之后将安装盘所有的rpm包都直接存储到服务器硬盘上这样就可以有备无患,在需要时可以直接使用
**解决办法**采用安装光盘安装RPM包的方式解决

  • 挂载安装光盘
  • 切换到软件包所在目录
cd /media/RHEL_5.4\ i386\ DVD/Server/
  • 安装对应的软件包
rpm -Uvh kernel-headers-2.6.18-164.el5.i386.rpm
rpm -Uvh glibc-headers-2.5-42.i386.rpm
rpm -Uvh glibc-devel-2.5-42.i386.rpm
rpm -Uvh libgomp-4.4.0-6.el5.i386.rpm
rpm -Uvh gcc-4.1.2-46.el5.i386.rpm
  • 不报错就安装成功
gcc -v

gcc-version gcc
gcc已经安装成功,版本为:4.1.2

再次编译1

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

......(省略)
checking for zlib.h... no
configure: error: *** zlib.h missing - please install first or check config.log ***

问题很明显,没有zlib,如果网络正常肯定立马yum install zlib修复此问题。
(这里可以尝试将编译参数--with-zlib去掉,此方式未验证)
可惜服务器无法使用公网,最直接的解决办法是找到安装盘找到对应的RPM安装包和依赖包(我本机是使用如下脚本安装,注意安装顺序)

rpm -Uvh zlib-1.2.3-3.i386.rpm
rpm -Uvh zlib-devel-1.2.3-3.i386.rpm

**解决办法**采用安装光盘安装RPM包的方式如上与安装gcc的方式一致,这里不使用这种方式,采用源码编译安装(由于已经有了gcc编译环境,所以可以编译安装了)
zlib网站找到最新源码安装包zlib-1.2.8.tar.gz下载

  • 解压
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
  • 编译
./configure
  • 安装
make && make install

再次编译2

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

......(省略)
checking for openssl/opensslv.h... no
configure: error: *** OpenSSL headers missing - please install first or check config.log ***

问题很明显,没有openssl-devel,如果网络正常肯定立马yum install openssl-devel修复此问题。
**解决办法**可惜服务器无法使用公网,最直接的解决办法是找到安装盘找到对应的RPM安装包和依赖包(我本机是使用如下脚本安装,注意安装顺序)
这里如果系统和我的版本一致或者更低版本,请不要使用此方式,因为你最终会发现OpenSSH 7.3p1需求的openssl最低需要0.9.8f版本,当然如果版本比0.9.8f更高就可以直接安装了
此处可以不解决直接跳到下一步编译安装升级openssl的解决办法

openssl version -a

openssl-old-version

rpm -Uvh e2fsprogs-devel-1.39-23.el5.i386.rpm
rpm -Uvh keyutils-libs-devel-1.2-1.el5.i386.rpm
rpm -Uvh libsepol-devel-1.15.2-2.el5.i386.rpm
rpm -Uvh libselinux-devel-1.33.4-5.5.el5.i386.rpm
rpm -Uvh krb5-devel-1.6.1-36.el5.i386.rpm
rpm -Uvh openssl-devel-0.9.8e-12.el5.i386.rpm

再次编译3

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords

**报错**日志如下(如果你直接成功了,那么恭喜你可以直接跳到安装步骤

......(省略)
checking OpenSSL header version... 0090802f (OpenSSL 0.9.8e-rhel5 01 Jul 2008)
checking OpenSSL library version... configure: error: OpenSSL >= 0.9.8f required (have "0090802f (OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008)")

问题很明显,没有openssl版本过低,本机是0.9.8e,而最低配置需要0.9.8f。(用以下方式直接安装0.9.8f也可以修复此问题,已验证)

**解决办法**去openssl官网下载最新稳定版本的openssl-1.0.2h.tar.gz

  • 解压
tar -zxvf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h
  • 编译(会加一点点自定义配置)
./config --prefix=/usr/local/ssl shared zlib-dynamic enable-camellia
  • 安装
make depend
make && make install
  • 额外配置必须(为OpenSSH升级做准备)
mv /usr/bin/openssl /usr/bin/openssl.bak
#mv /usr/include/openssl /usr/include/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v
  • 升级成功
openssl version -a

openssl-new-version

再次编译4

需要加一点点配置参数--with-ssl-dir=/usr/local/ssl这点配置与升级openssl过程中自定义的配置有关

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-ssl-dir=/usr/local/ssl

终于成功了
configure-openssh

安装

安装之前将现有的ssh配置文件备份

mv /etc/ssh/ssh_config /etc/ssh/ssh_config.bak
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
make && make install

如果不备份日志文件会导致新版本的ssh的配置文件无法覆盖旧版文件。 make-openssh-success
搞定收工
update-openssh-success

收尾工作

  • 重启sshd服务
service sshd restart
  • sshd服务开机自启动(以前配置过此处可以不执行,但是执行也不会有问题,万无一失)
chkconfig sshd on

参考的‘巨人’

  1. tuicool 此篇文章参考了大致思想,并未实际引用其中的方法。
  2. iteye 此篇文章参考了如何去配置gcc编译安装环境以及查看操作系统版本。
  3. baidu 此篇了解了OpenSSL headers是缺少什么包。
  4. 51cto 此篇了解了编译安装openssl后还需要配置的额外步骤,但是其中有个巨坑echo “/usr/local/ssl/lib” >> /etc/ld.so.conf其中的双引号需要时半角英文的,但是其中是中文的,这也让自己吃一堑长一智吧,不能完全Copy。
  5. 163 此篇了解了编译安装openssl时需要自定义的参数。
  6. csdn 此篇知道了编译安装openssl后在编译openssh时需要带参数--with-ssl-dir=/usr/local/openssl目录依据自定义的配置修改。
  7. 2cto 这篇是根据安装盘安装RPM包,写此篇日志时才看到的

最后吐槽一下BD搜索确实不行,国内论坛环境也确实不好,很多问题解决了帖子也就不了了之了,奈何公司内部网,只能用BD,只能用访问部分国内论坛。

转载于:https://my.oschina.net/makouz/blog/731970

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值