CentOS7升级OpenSSL


本文引自centos7升级openssl、openssh常见问题及解决方法
升级OpenSSL是个大坑,一不注意有可能就会出现远程不上的问题,首先一定要先安装telnet,这里说下Telnet协议,好像安全性不及SSH协议,因此被弃用了,但是这里为了以防万一,出现远程不上,因此先安装Telnet

下载及解压

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建下载路径
[root@xxx ~]# mkdir /home/download
[root@xxx ~]# cd /home/download

# 下载OpenSSL;下载地址的获取方式:浏览器打开https://www.openssl.org/->点击页面顶部标签Download->往下拉,会出现一个列表,在列表里面会有对应版本,右键复制地址就是对应版本的下载地址了
[root@xxx ~]# wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz

# 下载OpenSSH;下载地址的获取方式:打开OpenSSH官网https://www.openssh.com/->点击左侧的`For other systems`中的`Linux`->打开的新页面中往下拉看到Download->点击Download中的`HTTP mirrors`,从镜像中随意找个离你比较近的服务器镜像下载即可,这里选择的是第一个
[root@xxx ~]#
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz

# 解压OpenSSL
tar -zxvf openssl-1.1.1i.tar.gz

# 解压OpenSSH
tar -zxvf openssh-8.0p1.tar.gz

安装telnet(防止升级失败连不上服务器)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 查看是否安装了telnet服务
[root@xxx ~]# rpm -qa|grep telnet
[root@xxx ~]# rpm -qa|grep xinetd

# 如果没有安装,yum安装下
[root@xxx ~]# yum install telnet*
[root@xxx ~]# yum install xinetd

# 将服务开机自启
[root@xxx ~]# systemctl enable xinetd.service
[root@xxx ~]# systemctl enable telnet.socket

# 启动服务
[root@xxx ~]# systemctl start telnet.socket
[root@xxx ~]# systemctl start xinetd

# 修改配置文件
[root@xxx ~]# vim /etc/securetty
# 在最后面添加下面两行
pts/0
pts/1

# 重启xinetd
[root@xxx ~]# systemctl restart xinetd
[root@xxx ~]# netstat -ntlp|grep 23

升级OpenSSL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 查看原版本
[root@xxx ~]# openssl version -a

# 检查环境
[root@xxx ~]# cd /home/download/openssl-1.1.1i
[root@xxx ~]# ./config --prefix=/usr/local/openssl
[root@xxx ~]# ./config -t

# 编译&安装
[root@xxx ~]# make
[root@xxx ~]# make install

# 检查函数库
[root@xxx ~]# ldd /usr/local/openssl/bin/openssl

# 添加所缺函数库
[root@xxx ~]# echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

# 更新函数库
[root@xxx ~]# ldconfig -v

# 查看安装完成的版本
[root@xxx ~]# /usr/local/openssl/bin/openssl version

# 查看旧版本的openssl命令在哪里,要进行备份和替换
[root@xxx ~]# which openssl
# 将旧版本的openssl备份
[root@xxx ~]# mv /bin/openssl /usr/bin/openssl.bak20210201
# 建立新版本的软链接
[root@xxx ~]# ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
# 查看安装完的版本
[root@xxx ~]# openssl version
OpenSSL 1.1.1i 8 Dec 2020

升级OpenSSH

1
2
3
4
5
6
# 备份旧版本
[root@xxx ~]# mv /etc/ssh /etc/ssh.bak20210201

# 编译安装
[root@xxx ~]# cd /home/download/openssh-8.0p1
[root@xxx ~]# ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man --with-zlib=/usr/local/zlib --without-hardening

编译过程中有可能会出现的两个错误,如果没有出现可以直接Pass该部分,如果出现了,按照对应的问题解决即可

问题1:configure:error:***OpenSSL headers missing - please install first or check config.log ***
修复方案: yum install openssl-devel

问题2: configure:error:PAM headers not found
修复方案:yum install pam-devel

1
2
3
4
5
6
# 编译&&安装
[root@xxx ~]# make && make install

# 修改启动脚本
# 拷贝启动脚本
[root@xxx ~]# cp ./contrib/redhat/sshd.init /etc/init.d/sshd

修改内容如下:

  1. 修改SSHDvim /etc/init.d/sshd的内容,对比下相关内容,修改成如图对应内容即可

  2. 修改sshd配置文件/etc/ssh/sshd_config,编辑的时候使用搜查查询到以下关键词,修改为对应的内容

    1
    2
    3
    PermitRootLogin yes
    X11Forwarding yes
    PasswordAuthentication yes

    修改外后的效果见下图

继续

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 卸载原有的ssh
[root@xxx ~]# for i in $(rpm -qa |grep openssh);do rpm -e $i --nodeps ;done
# 这个地方执行的时候会弹出几个warning,把waring后面的文件名再改回来
[root@xxx ~]# mv /etc/ssh/sshd_config.rpmsave /etc/ssh/sshd_config
[root@xxx ~]# mv /etc/ssh/ssh_config.rpmsave /etc/ssh/ssh_config
[root@xxx ~]# mv /etc/ssh/moduli.rpmsave /etc/ssh/moduli

# 替换相关命令,重启sshd服务
[root@xxx ~]# cp -arp /usr/local/openssh/bin/* /usr/bin/
[root@xxx ~]# service sshd restart
# 验证升级,让其他人telnet下服务器IP地址的22端口,如果显示SSH-2.0-OpenSSH_8.0表示成功了
# 设置开机启动
[root@xxx ~]# chkconfig --add sshd
[root@xxx ~]# chkconfig --level 2345 sshd on
[root@xxx ~]# chkconfig --list

关闭telnet相关服务

1
2
3
4
5
# 关闭服务
systemctl stop telnet.socket
systemctl stop xinetd
systemctl disable xinetd.service
systemctl disable telnet.socket