CentOS7 OpenSSL升级到OpenSSH9.5p1

原文链接:
CentOS7 OpenSSL升级1.1.1w;OpenSSH 升级 9.5p1 保姆级教程
openssl从3.1.0升级到3.1.1遇到的问题

注意操作时需要联网请参考如下链接

内网服务器联网安装依赖参见我的另一篇文章

一、 前言

OpenSSH 的加密功能需要用到OpenSSL,所以在升级OpenSSH的时候,大部分情况是需要将OpenSSL一起升级的。

这里我们可以先升级OpenSSL到OpenSSL 1.1.1w 11 Sep 2023

然后再升级OpenSSH 到OpenSSH_9.5p1, OpenSSL 1.1.1w 11 Sep 2023
当然也可以从第三步开始操作,如果你的OpenSSL 版本太低会遇到报错 configure: error: OpenSSL >= 1.1.1 required,此时你需要跳到文末升级OpenSSL 再返回继续操作

1.1 注意点

在升级之前先将需要的包上传到服务器,以免升级失败后导致上传文件失败。(这里我用的sftp上传,sftp的核心也需要用到SSH),并安装telnet-server服务保证SSH升级失败后,可以继续远程连接。

需要有初始yum源,要不然安装这两个服务众多的依赖包将会是梦魇。

原始版本信息如下。

二、升级OpenSSL

2.1 安装依赖

bash 复制代码
yum -y install gcc*

2.2备份、卸载原有OpenSSL

1、 查找openssl 相关目录,然后备份

bash 复制代码
[root@vm206 etc]# whereis openssl

openssl: /usr/bin/openssl /usr/lib64/openssl /usr/share/man/man1/openssl.1ssl.gz

[root@vm206 etc]# mv /usr/bin/openssl  /usr/bin/openssl.old

[root@vm206 etc]# mv /usr/lib64/openssl /usr/lib64/openssl.old

2、 卸载 openssl (这一步看个人需要,我有洁癖所以我卸载了)

bash 复制代码
yum remove openssl

2.3安装openssl

bash 复制代码
tar -xzvf openssl-1.1.1w.tar.gz

cd openssl-1.1.1w/

./config --prefix=/usr

make && make install

这里我的目录选择了/usr 是因为系统最初始的openssl的目录就是/usr 这样可以省去的软连接、更新链接库的问题

2.4验证

bash 复制代码
[root@vm206 openssl-1.1.1w]# whereis openssl

openssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz /usr/share/man/man1/openssl.1

[root@vm206 openssl-1.1.1w]# openssl  version

OpenSSL 1.1.1w  11 Sep 2023

可以看到我这边的目录和老版本的openssl的目录保持了一致,唯一不同的是多了一个/usr/include/openssl 库目录

如果不加prefix ,openssl的默认路径如下
Bin: /usr/local/bin/openssl

include库 :/usr/local/include/openssl

lib库:/usr/local/lib64/

engine库:/usr/lib64/openssl/engines

三、 升级OpenSSH

内网中yum需要代理,请看本文开头的蓝色加粗超链接

3.1 安装telnet-server

bash 复制代码
yum install telnet* -y

systemctl  start telnet.socket

systemctl enable telnet.socket

mv /etc/securetty /etc/securetty.bak

临时关闭安全登录,否则无法进行远程telnet连接

有防火墙记得关闭防火墙,并关闭SELinux

防火墙:

bash 复制代码
 firewall-cmd --state

关闭防火墙:

bash 复制代码
systemctl stop firewalld.service

测试telnet远程登录,telnet登录成功才进行接下来的操作,防止sshd服务被搞坏了远程连不上服务器

bash 复制代码
telnet 172.16.1.182
bash 复制代码
Type `help' to learn how to use Xshell prompt.
[D:\~]$ telnet 172.16.1.182


Connecting to 172.16.1.182:23...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Kernel 5.15.1-1.el7.elrepo.x86_64 on an x86_64
0003 login: root
Password: 
Last login: Wed Dec 13 09:46:44 from 172.10.110.247
[root@0003 ~]# 

如上,已经可以通过telnet远程连接了,这下可以放心大胆的操作了。

接下来的操作用telnet远程,不要用ssh远程,防止升级OpenSSH9.5p1时原ssh文件卸载不干净

3.2 安装依赖包

bash 复制代码
yum install -y gcc pam-devel rpm-build wget zlib-devel openssl-devel net-tools

3.3 备份

通过whereis ssh sshd找出bin文件、源文件,然后备份。 man手册不需要备份。

bash 复制代码
mv /etc/ssh /etc/ssh.bak

mv /usr/bin/ssh /usr/bin/ssh.bak

mv /usr/sbin/sshd /usr/sbin/sshd.bak

mv /etc/pam.d/sshd  /etc/pam.d/sshd.old

备份pam验证文件

3.4卸载旧版OpenSSH

bash 复制代码
yum remove openssh

3.5安装新版OpenSSH

bash 复制代码
tar -xzvf openssh-9.5p1.tar.gz

cd openssh-9.5p1

./configure --prefix=/usr --sysconfdir=/etc/ssh  --with-pam   --with-ssl-dir=/usr/local/lib64/

其中--prefix --sysconfdir 这两个参数我仍然采用了系统之前的默认路径,避免路径混乱导致的问题

如果报错 configure: error: OpenSSL >= 1.1.1 required请看文末的问题

bash 复制代码
make

make install

cd /etc/pam.d/

mv sshd.old sshd

恢复ssh pam认证

bash 复制代码
cd openssh-9.5p1/

cp contrib/redhat/sshd.init /etc/init.d/sshd

chkconfig --add sshd

systemctl  enable sshd

systemctl  start sshd

可以看到,已经升级成功

bash 复制代码
[root@0003 ~]# ssh -V
OpenSSH_9.5p1, OpenSSL 3.1.0 14 Mar 2023
[root@0003 ~]# 

3.6修改/etc/ssh/sshd_config 配置文件

文件修改如下,然后重启sshd服务即可

登录成功界面

问题

bash 复制代码
configure: error: OpenSSL >= 1.1.1 required

原因

原因是,我上一次修复BUG时,把openssl版本直接从1.1.1t升级到了3.1.0,需要的lib类库也需要从libssl.so.1.1更新到libssl.so.3,这一次同样是3版本,我以为不用更新了,所以出现了上面的错误;

解决办法

进入安装好的/usr/local/openssl311/lib64目录下(openssl311是自定义的,选择自己的安装目录),将libssl.so.3文件和libcrypto.so.3文件复制到/usr/lib64目录下,选择覆盖;

升级过程

下载:

内网中wget需要代理,请看本文开头的蓝色加粗超链接

bash 复制代码
wget https://www.openssl.org/source/openssl-3.1.0.tar.gz --no-check-certificate

解压:

bash 复制代码
tar -xzvf openssl-3.1.0.tar.gz

进入解压后目录:

bash 复制代码
cd openssl-3.1.0

配置安装目录:

bash 复制代码
./config --prefix=/usr/local/openssl310

注意--prefix=/usr/local/openssl311,如果--prefix=/usr/local/openssl覆盖安装之前版本会失败,我已踩坑

这里安装目录和之前目录保持不同,安装完成再去删除之前的 /usr/local/openssl目录,不删除就当废弃文件放在那也行
我在升级另一台服务器又遇到这个开头的错Can't locate IPC/Cmd.pm in

参考:
编译升级OpenSSL报错:Can't locate IPC/Cmd.pm
解决一个问题----cpan配置(proxy,mirror)

cpan好像是一个脚本工具,类似于shell

即先安装cpan,初始化cpan配置时选手动配置,一直回车使用默认配置,再重新进入cpan命令行为其配置代理

再用cpan安装IPC/Cmd.pm

编译安装:

bash 复制代码
make && make install

进入安装好的/usr/local/openssl311/lib64目录下(openssl311是自定义的,选择自己的安装目录),

bash 复制代码
cd /usr/local/openssl310/lib64

将libssl.so.3文件和libcrypto.so.3文件复制到/usr/lib64目录下,选择覆盖;

bash 复制代码
cp libssl.so.3  /usr/lib64
cp libcrypto.so.3  /usr/lib64

本地查看是否成功:

bash 复制代码
/usr/local/openssl310/bin/openssl version -a

出现问题,解决后可正常显示新版本,或无问题,继续下一步

软链接:进入/usr/bin目录,查询openssl的软链接,如果指定的是旧版本,使用命令取消旧软链接

bash 复制代码
unlink /usr/bin/openssl

创建新软链接:

bash 复制代码
ln -s /usr/local/openssl310/bin/openssl /usr/bin/openssl

刷新命令库:

bash 复制代码
ldconfig

在任一目录直接验证,可查看到新版本

bash 复制代码
openssl version -a
bash 复制代码
[root@0003 ~]# openssl version -a
OpenSSL 3.1.0 14 Mar 2023 (Library: OpenSSL 3.1.0 14 Mar 2023)
built on: Tue Dec 12 08:24:05 2023 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DNDEBUG
OPENSSLDIR: "/usr/local/openssl310/ssl"
ENGINESDIR: "/usr/local/openssl310/lib64/engines-3"
MODULESDIR: "/usr/local/openssl310/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0xfffa32035f8bffff:0x800d19e4fbb
[root@0003 ~]# 
相关推荐
梅见十柒17 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热20 分钟前
路由基础(全)
linux·网络·网络协议·安全
传而习乎30 分钟前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary32 分钟前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
我们的五年40 分钟前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教1 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
羑悻的小杀马特1 小时前
环境变量简介
linux
小陈phd2 小时前
Vscode LinuxC++环境配置
linux·c++·vscode
运维&陈同学2 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列