CentOS Linux release 7.5升级OpenSSH版本至9.0p1

本篇文章以 CentOS Linux release 7.5.1804 (Core) 版本的Linux系统为例进行升级

(本次升级因是生产环境的服务器,所以服务器是不能连接外网的,而且整个升级过程中是通过访问堡垒机然后SSH连接服务器完成升级的,不允许绕过堡垒机使用Telnet连接做保障,所以升级之前先对服务器做一个快照,防止升级失败后连不上服务器,因此升级过程中万分小心,一旦失败就要通过快照还原,而且还不好找到原因,只能重新来过,十分麻烦)

升级openssh步骤:

一、准备工作:

1.1 先从网站下载最新的安装包:

http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/

openssh-9.0p1.tar.gz (注意:要下载p1版,此版为编译安装包)

https://www.openssl.org/source/

这里要下载 openssl-1.1.1q.tar.gz (我试了下载openssl-3.0.5.tar.gz不能用)

http://www.zlib.net/

zlib-1.2.12.tar.gz

1.2、查看系统当前软件版本

#rpm -qa | grep zlib  

#openssl version -a

#ssh -V

1.3、配置本地yum源

因安装相关工具和编译源码需要先安装部分软件包,因此需要先配置好本地yum源(如有远程yum源更好,因为生产环境无法联网,这里讲解本地上传镜像然后配置本地yum源),配置方法如下:

  • 下载对应版本的系统镜像文件上传到服务器:

链接:https://pan.baidu.com/s/1IeSCcEUH2YyGVqWRPR7VgA?pwd=9r6o

提取码:9r6o

  • 创建目录:

mkdir -p /data/centos/

  • 挂载iso镜像文件

mount -o loop /media/CentOS-6.5-x86_64-bin-DVD1.iso /data/centos/

通过 df -h 查看挂载情况

  • 修改配置文件

先备份一下原文件:cp -r /etc/yum.repos.d/ /home/backup/

进入/etc/yum.repos.d/目录下修改CentOS-Base.repo配置文件(该配置文件中的所有内容删除),centos系统在此目录下有多个yum的配置文件,本地yum配置只留一个即可,然后改名为base.repo

cd /etc/yum.repos.d/

mv CentOS-Base.repo base.repo

vim base.repo

仅保留图片内容即可

  • 清空原始yum缓存,并重新缓存配置的本地yum源

yum clean all

yum repolist

这两个命令都执行成功之后 本地yum源就配置成功了

1.4、安装telnet服务并启用(我的本次升级不让用这一步,有条件的话还是用了比较保险)

    因升级OpenSSH过程中需要卸载现有OpenSSH,因此为了保持服务器的远程连接可用,需要启用telnet服务作为替代,如升级出现问题,也可通过telnet登录服务器进行回退。

    A、安装telnet服务

#yum -y install telnet-server* telnet xinetd*

    B、启用telnet

  先关闭防火墙,否则telnet可能无法连接

# service iptables stop

# chkconfig iptables off

#vi /etc/xinetd.d/telnet(Centos7不需要这一步)

service telnet

{

    flags           = REUSE

    socket_type     = stream

    wait            = no

    user            = root

    server          = /usr/sbin/in.telnetd

    log_on_failure  += USERID

    disable         = no

}

#mv /etc/securetty /etc/securetty.old #允许root用户通过telnet登录

#service xinetd start #启动telnet服务

如果启动没反应,使用以下两个命令启动

# systemctl start telnet.socket

# systemctl start xinetd

启动Telnet

#chkconfig xinetd on #使telnet服务开机启动,避免升级过程中服务器意外重启后无法远程登录系统

#telnet [ip] #新开启一个远程终端以telnet登录验证是否成功启用

1.5、安装编译所需工具包

#yum -y install gcc pam-devel zlib-devel

(我在升级过程中,在走到下边 OpenSSL安装的时候,make命令正常, make test 一步的时候报错,因此上传镜像,配置了一下本地yum源(见1.3步骤),配置完本地源之后执行安装 perl-Test-Simple rpm 包的命令:# yum install perl-Test-Simple之后再执行make test就通过了)

二 、正式升级:

2.1 升级zlib

  • 解压zlib源码并编译:

#tar -zxvf zlib-1.2.12.tar.gz

#cd zlib-1.2.12

#./configure --prefix=/usr

#make

  • 卸载当前zlib

注意:此步骤必须在步骤A执行完毕后再执行,否则先卸载zlib后,/lib64/目录下的zlib相关库文件会被删除,步骤A编译zlib会失败。(补救措施:从其他相同系统的服务器上复制/lib64、/usr/lib和/usr/lib64目录下的libcrypto.so.10、libssl.so.10、libz.so.1、libz.so.1.2.3四个文件到相应目录即可。可通过whereis、locate或find命令找到这些文件的位置)

#rpm -e --nodeps zlib

  • 安装之前编译好的zlib

# 在zlib编译目录(zlib-1.2.12)执行如下命令

#make install

  • 共享库注册

zlib安装完成后,会在/usr/lib目录中生产zlib相关库文件,需要将这些共享库文件注册到系统中。

#echo '/usr/lib' >> /etc/ld.so.conf

#ldconfig -v 更新共享库cache

或者采用如下方式也可:

#ln -s /usr/lib/libz.so.1 libz.so.1.2.11

#ln -s /usr/lib/libz.so libz.so.1.2.11

#ln -s /usr/lib/libz.so.1 /lib/libz.so.1

#ldconfig

    可通过yum list命令验证是否更新成功(更新失败yum不可用),另外redhat和centos的5.*版本不支持高于1.2.3的zlib版本。

2.2 升级OpenSSL

官方升级文档:http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/openssl.html

  • 备份当前openssl

#find / -name openssl

/usr/lib64/openssl /usr/bin/openssl /etc/pki/ca-trust/extracted/openssl

#mv /usr/lib64/openssl /usr/lib64/openssl.old

#mv /usr/bin/openssl /usr/bin/openssl.old

#mv /etc/pki/ca-trust/extracted/openssl /etc/pki/ca-trust/extracted/openssl.old

如下两个库文件可以先备份,因系统内部分工具(如yum、wget等)依赖此库,但是我看这次我下载的版本是包含这两个的应该,我在恢复这两个文件的时候提示我是否覆盖,我就没有覆盖,升级完成之后也没有发现什么问题,所以根据个人情况处理这两个库文件

  # cp  /usr/lib64/libcrypto.so.10  /usr/lib64/libcrypto.so.10.old

  # cp  /usr/lib64/libssl.so.10  /usr/lib64/libssl.so.10.old

  • 卸载当前openssl

直接执行命令:

rpm -qa |grep openssl|xargs -i rpm -e --nodeps {}

或者先查看后手动删除:

#rpm -qa |grep openssl

openssl-1.0.1e-42.el6.x86_64

#rpm -e --nodeps openssl-1.0.1e-42.el6.x86_64

#rpm -qa |grep openssl

  • 解压下载的源码openssl-1.1.1q.tar.gz并编译安装:

#tar -zxvf openssl-1.1.1q.tar.gz

#cd openssl-1.1.1q

#必须加上--shared,否则编译时会找不到新安装的openssl的库而报错

#./config --prefix=/usr --openssldir=/etc/ssl --shared zlib 

#make

#make test #必须执行这一步结果为pass才能继续,否则即使安装完成,ssh也无法使用

#make install

#openssl version -a #查看是否升级成功

  • 恢复共享库(这个根据自身情况决定是否这么处理,参看第①步)

#mv /usr/lib64/libcrypto.so.10.old /usr/lib64/libcrypto.so.10

#mv /usr/lib64/libssl.so.10.old /usr/lib64/libssl.so.10

2.3 升级OpenSSH

官方升级文档:http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssh.html

  • 备份当前openssh

#mv /etc/ssh /etc/ssh.old

#cp -r /usr/libexec/openssh /etc/libexec/openssh.old

  • 卸载当前openssh

直接执行命令:

rpm -qa |grep openssh|xargs -i rpm -e --nodeps {}

或者分步骤进行:

#rpm -qa |grep openssh

openssh-clients-5.3p1-111.el6.x86_64 openssh-server-5.3p1-111.el6.x86_64 openssh-5.3p1-111.el6.x86_64 openssh-askpass-5.3p1-111.el6.x86_64

#rpm-e --nodeps openssh-5.3p1-111.el6.x86_64

#rpm-e --nodeps openssh-server-5.3p1-111.el6.x86_64

#rpm-e --nodeps openssh-clients-5.3p1-111.el6.x86_64

#rpm-e --nodeps openssh-askpass-5.3p1-111.el6.x86_64

#rpm -qa |grep openssh

  • openssh安装前环境配置

#install -v -m700 -d /var/lib/sshd

#chown -v root:sys /var/lib/sshd

#groupadd -g50 sshd

#useradd -c'sshd PrivSep' -d /var/lib/sshd -g sshd -s /bin/false -u50 sshd

  • 解压下载的openssh-9.0p1.tar.gz源码并编译安装:

#tar -zxvf openssh-9.0p1.tar.gz

#cd openssh-9.0p1

# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd

#make

#make install

  • openssh安装后环境配置

# 在openssh编译目录(openssh-9.0p1)执行如下命令

#install -v -m755 contrib/ssh-copy-id /usr/bin

#install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1

#install -v -m755 -d /usr/share/doc/openssh-9.0p1

#install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-9.0p1

#ssh -V #验证是否升级成功

  • 启用OpenSSH服务

# 在openssh编译目录执行如下目录

#echo 'X11Forwarding yes' >> /etc/ssh/sshd_config

#允许root用户通过ssh登录

#echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

#cp -p contrib/redhat/sshd.init /etc/init.d/sshd

#chmod +x /etc/init.d/sshd

#chkconfig --add sshd

#chkconfig sshd on

#chkconfig --list sshd

#service sshd restart

注意:如果升级操作一直是在ssh远程会话中进行的,上述sshd服务重启命令可能导致会话断开并无法使用ssh再行登入(即ssh未能成功重启),此时需要通过telnet登入再执行sshd服务重启命令。

  • 善后工作

新开启远程终端以ssh [ip]登录系统,确认一切正常升级成功后,只需关闭telnet服务以保证系统安全性即可。

#mv /etc/securetty.old /etc/securetty

#chkconfig xinetd off

#service xinetd stop

  如有必要,可重新开启防火墙

# service iptables start

# chkconfig iptables on

    如需还原之前的ssh配置信息,可直接删除升级后的配置信息,恢复备份。

#rm -rf /etc/ssh

#mv /etc/ssh.old /etc/ssh

以上就是全部内容,成功升级两台服务器,以上经验收入囊中,希望能帮到大家!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值