一、 前言

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

这里我们选择先升级OpenSSL到OpenSSL 3.2.0  

然后再升级OpenSSH 到OpenSSH_9.5p1


1.1 注意点

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

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


原始版本信息如下。

[root@iZvo301hwu0kpjnfrgopq7Z yum.repos.d]# cat /etc/redhat-release  

Anolis OS release 7.9

[root@iZvo301hwu0kpjnfrgopq7Z yum.repos.d]# ssh -V

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

[root@iZvo301hwu0kpjnfrgopq7Z yum.repos.d]# openssl version

OpenSSL 1.0.2k-fips  26 Jan 2017


二、升级OpenSSL

2.1 安装依赖

yum -y install gcc*


2.2备份、卸载原有OpenSSL

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

[root@iZvo301hwu0kpjnfrgopq7Z yum.repos.d]# whereis openssl

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

[root@iZvo301hwu0kpjnfrgopq7Z yum.repos.d]# mv /usr/bin/openssl /usr/bin/openssh.bak

[root@iZvo301hwu0kpjnfrgopq7Z yum.repos.d]# mv /usr/lib64/openssl /usr/lib64/openssl.bak


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

yum remove openssl


2.3安装openssl

[root@iZvo301hwu0kpjnfrgopq7Z soft]# tar -zxvf openssl-3.2.0.tar.gz

[root@iZvo301hwu0kpjnfrgopq7Z soft]# cd openssl-3.2.0/

./config --prefix=/usr

make && make install

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


[root@iZvo301hwu0kpjnfrgopq7Z openssl-3.2.0]# ./config --prefix=/usr

Can't locate IPC/Cmd.pm in @INC (@INC contains: /soft/openssl-3.2.0/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /soft/openssl-3.2.0/external/perl/Text-Template-1.56/lib) at /soft/openssl-3.2.0/util/perl/OpenSSL/config.pm line 19.

BEGIN failed--compilation aborted at /soft/openssl-3.2.0/util/perl/OpenSSL/config.pm line 19.

Compilation failed in require at /soft/openssl-3.2.0/Configure line 23.

BEGIN failed--compilation aborted at /soft/openssl-3.2.0/Configure line 23.

遇到这个报错不要慌,安装perl-IPC-Cmd就能解决,不用到网上一通乱找了

yum install -y perl-IPC-Cmd


2.4验证

[root@iZvo301hwu0kpjnfrgopq7Z openssl-3.2.0]# whereis openssl

openssl: /usr/bin/openssl /usr/lib64/openssl.bak /usr/include/openssl /usr/share/man/man1/openssl.1ossl

[root@iZvo301hwu0kpjnfrgopq7Z openssl-3.2.0]# openssl version

OpenSSL 3.2.0 23 Nov 2023 (Library: OpenSSL 3.2.0 23 Nov 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

3.1 安装telnet-server

yum install telnet* -y

systemctl  start telnet.socket

systemctl enable telnet.socket

mv /etc/securetty /etc/securetty.bak

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

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

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


3.2 安装依赖包

yum install -y gcc pam-devel rpm-build wget zlib-devel openssl-devel net-tools


3.3 备份

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

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.bak

备份pam验证文件


3.4卸载旧版OpenSSH

yum remove openssh

 

3.5安装新版OpenSSH

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 这两个参数我仍然采用了系统之前的默认路径,避免路径混乱导致的问题

make && make install

cd /etc/pam.d/

mv sshd.old sshd


恢复ssh pam认证

cd openssh-9.5p1/

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

chkconfig --add sshd

systemctl  enable sshd

systemctl  start sshd


可以看到,已经升级成功

[root@iZvo301mixqkhta6jrqg7gZ ~]# ssh -V

OpenSSH_9.5p1, OpenSSL 3.2.0 23 Nov 2023


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

编辑sshd_config文件,在末尾追加三行数据,文件修改如下,然后重启sshd服务即可

PermitRootLogin yes

PubkeyAuthentication yes

PasswordAuthentication yes