撰写时openssl最新版本:openssl-3.3.2

撰写时openssh最新版本:openssh-9.9p1

参考链接:Linux7 升级openssh9.3

查看服务器版本

1
cat /etc/redhat-release

查看openssh版本

1
ssh -V

解决升级: 查看openssh版本,发现是7.8版本,将openssh升级至最新版本

查看openssh链接端口

目的是为了将升级后的端口号改回来,避免升级后无法登录

里面有一个字段是 Port ,后面是端口号,例如 Port 22 , 将这个端口号记录下来!!!

1
vim /etc/ssh/sshd_config

升级前准备

安装telnet

1. 下载服务

升级过程中,sshd可能无法使用,因此需要安装telnete服务
telnet-server、xinetd、telnet

1
yum -y install xinetd telnet-server telnet

下载过程中如果出错可以单个下载,xinetd 安装失败可以跳过(不安装了,但是装上更好)

2. 配置服务

配置telnet登录的终端类型 ,在 /etc/securetty 文件末尾加一些pts终端如下:

1
2
3
4
5
pts/3
pts/1
pts/2
pts/0
pts/4

我不会使用命令行,所以直接在宝塔找到 /etc/securetty ,将上面内容追加到了文件末尾。

命令行修改:

1
2
3
4
5
6
7
vim  /etc/securetty

pts/3
pts/1
pts/2
pts/0
pts/4

然后按 Esc :wq 保存退出。

3. 启动telnet服务,并设置开机自动启动
1
2
systemctl enable telnet.socket
systemctl start telnet.socket

xinetd 服务安装成功执行

1
2
systemctl enable xinetd
systemctl start xinetd
4. 查看telnet端口
1
netstat  -lntp | grep 23
5. 切换到telnet方式登录

防止ssh连接意外中断造成升级失败

img

安装依赖包

1
yum install  -y  perl perl-devel gcc gcc-c++ zlib zlib-devel
1
yum install -y pam* zlib*

下载最新版 opensslopenssh

  1. openssl下载地址

  2. openssh下载镜像列表

  3. openssh下载地址之一

openssh-9.9p1.tar.gz openssl-3.3.2.tar.gz

Clip_2024-10-11_16-56-12

注意:目前openssl 最新版为 openssl-3.3.2, openssh最新版为 openssh-9.9p1官网下载最新版即可)

安装openssl

1. 备份老版本ssl

备份 /usr/bin/openssl/usr/include/openssl两个文件

1
mv /usr/bin/openssl /usr/bin/openssl.bak
1
mv /usr/include/openssl /usr/include/openssl.bak

2. 解压openssl

1
tar -zxvf openssl-3.3.2.tar.gz
1
cd openssl-3.3.2

3. 编译和安装

建议安装到 /usr/local/openssl 目录,要问我为啥我也不知道🤣

1
./config shared --openssldir=/usr/local/openssl --prefix=/usr/local/openssl
1
make && make install
可能出现的问题
1. Perl 无法找到 IPC/Cmd.pm 模块

这通常是因为该模块未安装

1
2
3
4
Can't locate IPC/Cmd.pm in @INC (@INC contains: /usr/local/openssl-3.3.2/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 . /usr/local/openssl-3.3.2/external/perl/Text-Template-1.56/lib) at /usr/local/openssl-3.3.2/util/perl/OpenSSL/config.pm line 19.
BEGIN failed--compilation aborted at /usr/local/openssl-3.3.2/util/perl/OpenSSL/config.pm line 19.
Compilation failed in require at /usr/local/openssl-3.3.2/Configure line 23.
BEGIN failed--compilation aborted at /usr/local/openssl-3.3.2/Configure line 23.

解决方案:安装 IPC/Cmd.pm 模块

1
yum install perl-IPC-Cmd

安装后验证

安装完成后,你可以通过以下命令来验证 IPC::Cmd 是否成功安装:

1
perl -MIPC::Cmd -e 'print "IPC::Cmd is installed\n";'

如果没有错误信息,就表示安装成功。接下来,你可以重新运行 OpenSSL 的配置命令。

2. 运行 util/mkinstallvars.pl 脚本时,Perl 的 List::Util 模块无法正确导入 pairs 函数

这通常是因为 List::Util 版本较旧,或者该模块未正确安装。

1
2
3
4
5
/usr/bin/perl util/mkinstallvars.pl PREFIX=. BINDIR=apps APPLINKDIR=ms LIBDIR= INCLUDEDIR=include "INCLUDEDIR=./include" ENGINESDIR=engines MODULESDIR=providers "VERSION=3.3.2" "LDLIBS=-ldl -pthread " > builddata.pm
"pairs" is not exported by the List::Util module
Can't continue after import errors at util/mkinstallvars.pl line 14.
BEGIN failed--compilation aborted at util/mkinstallvars.pl line 14.
make: *** [builddata.pm] Error 255

解决方案: 更新 Perl 模块

1
sudo yum reinstall perl-List-Util

验证模块安装

安装后,你可以通过以下命令验证 List::Util 是否已正确安装,并检查其版本:

1
perl -MList::Util -e 'print "$List::Util::VERSION\n";'

确保输出的版本号是较新的版本(例如,>= 1.33)。

3. 没有找到 perl-List-Util

这可能是因为该模块是 Perl 的核心模块,通常随 Perl 一起安装,而不是作为单独的包提供。

1
2
3
4
5
6
7
8
9
10
[root@localhost openssl-3.3.2]# yum reinstall perl-List-Util
Loaded plugins: fastestmirror
No Match for argument: perl-List-Util
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* centos-sclo-rh: mirrors.ustc.edu.cn
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
Error: Nothing to do

解决方案: 安装 perl-List-Util 的开发包

1
yum install perl perl-core
4. make 命令报错

原因不知道

解决方案: 重复执行几遍,多执行几次,总有一次会成功的😅,也可以将 make && make install 分两次执行,多执行几遍总会成功的。

4. 验证安装

安装完成后,echo $? 查看下最后的 make install 是否有报错,0标识没有问题

1
echo $?

5. 重做软连接

1
2
3
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

可能还需要以下软链接

1
2
3
ln -sf /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -sf /usr/local/openssl/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3

执行下面2个命令加载新配置

1
2
3
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
/sbin/ldconfig

6. 查看确认版本

1
openssl version
可能出现的问题:
1. OpenSSL 在尝试加载 libssl.so.3 共享库时找不到该库文件。
1
2
[root@localhost openssl-3.3.2]# openssl version
openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

解决方案:

可能是软连接设置错误,确认 /usr/local/openssl/lib64/libssl.so.3 文件存在,libcrypto 同理,路径中 lib64 是64位系统,32位系统是 lib

安装openssh

1. 备份openssh

1
mv /etc/ssh  /etc/ssh_bak

2. 解压并授与root权限

1
tar -zxvf openssh-9.9p1.tar.gz
1
chown -R root.root openssh-9.9p1
1
cd openssh-9.9p1/

3. 修改版本号

不改的话会扫出低危漏洞,不改也行,我是在宝塔面板改的文件,不会用vim😂
找到版本那一行 将 openSSH_9.9 修改为自定义的 welcome back

1
vi  version.h

img

4. 配置、编译、安装

1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/openssl/include --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/usr/local/openssl --without-hardening
1
make && make install
可能出现的问题
1. checking OpenSSL library version… not found configure: error: OpenSSL library not found.

当你在编译 OpenSSH 时遇到 checking OpenSSL library version... not found 错误,尽管 OpenSSL 已安装并且能够通过 openssl version 命令确认其版本,这通常表明配置脚本无法找到 OpenSSL 的开发库或头文件。

解决方案: 编译安装openssl时报configure: error: OpenSSL library not found解决办法

阅读参考链接并综合实际情况得出以下命令:

1
CCFLAGS="-I/usr/local/openssl/include" LDFLAGS="-L/usr/local/openssl/lib64" ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --without-hardening

5. 验证安装

安装完成后,echo $? 查看下最后的 make install 是否有报错,0标识没有问题

1
echo $?

6. 修改文件权限并修改配置

1
2
3
4
5
6
7
8
9
10
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
cp -r contrib/redhat/sshd.init /etc/init.d/sshd
cp -r contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
chkconfig --add sshd

7. 设置开机自启

systemctl enable sshd #也是添加开机自启动,与该命令一致

1
chkconfig sshd on

8. 删除或者移走systemd管理的sshd文件.

不移走的话影响我们重启sshd服务

1
2
mv /usr/lib/systemd/system/sshd.service /tmp
mv /usr/lib/systemd/system/sshd.socket /tmp

9. 重启服务

用于重新加载系统管理守护进程(systemd)。它会重新执行 systemd 守护进程,使其重新读取配置文件和其他相关设置,而无需重启整个系统。

重启 SSH 服务(sshd)。它会停止 SSH 守护进程,然后重新启动它,从而使任何配置更改立即生效。

1
2
systemctl daemon-reexec
systemctl restart sshd

10. 查看确认版本

1
ssh -V

升级成功后关闭telnet服务

端口开放不安全

关闭自启动,关闭服务

1
2
systemctl disable telnet.socket
systemctl stop telnet.socket

已安装 xinetd 服务才执行:

1
2
systemctl disable xinetd.service
systemctl stop xinetd.service