CentOS 7 升级 openssh 和 openssl
撰写时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 | pts/3 |
我不会使用命令行,所以直接在宝塔找到 /etc/securetty ,将上面内容追加到了文件末尾。
命令行修改:
1 | vim /etc/securetty |
然后按 Esc :wq 保存退出。
3. 启动telnet服务,并设置开机自动启动
1 | systemctl enable telnet.socket |
xinetd服务安装成功执行
1 | systemctl enable xinetd |
4. 查看telnet端口
1 | netstat -lntp | grep 23 |
5. 切换到telnet方式登录
防止ssh连接意外中断造成升级失败

安装依赖包
1 | yum install -y perl perl-devel gcc gcc-c++ zlib zlib-devel |
1 | yum install -y pam* zlib* |
下载最新版 openssl 和 openssh
openssh-9.9p1.tar.gz openssl-3.3.2.tar.gz

注意:目前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 | 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. |
解决方案:安装 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 | /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 |
解决方案: 更新 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 | [root@localhost openssl-3.3.2]# yum reinstall perl-List-Util |
解决方案: 安装 perl-List-Util 的开发包
1 | yum install perl perl-core |
4. make 命令报错
原因不知道
解决方案: 重复执行几遍,多执行几次,总有一次会成功的😅,也可以将 make && make install 分两次执行,多执行几遍总会成功的。
4. 验证安装
安装完成后,echo $? 查看下最后的 make install 是否有报错,0标识没有问题
1 | echo $? |
5. 重做软连接
1 | ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl |
可能还需要以下软链接
1 | ln -sf /usr/local/openssl/lib64/libssl.so.3 /usr/lib64/libssl.so.3 |
执行下面2个命令加载新配置
1 | echo "/usr/local/openssl/lib" >> /etc/ld.so.conf |
6. 查看确认版本
1 | openssl version |
可能出现的问题:
1. OpenSSL 在尝试加载 libssl.so.3 共享库时找不到该库文件。
1 | [root@localhost openssl-3.3.2]# openssl version |
解决方案:
可能是软连接设置错误,确认 /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 |

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 | chmod 600 /etc/ssh/ssh_host_rsa_key |
7. 设置开机自启
systemctl enable sshd #也是添加开机自启动,与该命令一致
1 | chkconfig sshd on |
8. 删除或者移走systemd管理的sshd文件.
不移走的话影响我们重启sshd服务
1 | mv /usr/lib/systemd/system/sshd.service /tmp |
9. 重启服务
用于重新加载系统管理守护进程(
systemd)。它会重新执行systemd守护进程,使其重新读取配置文件和其他相关设置,而无需重启整个系统。重启 SSH 服务(
sshd)。它会停止 SSH 守护进程,然后重新启动它,从而使任何配置更改立即生效。
1 | systemctl daemon-reexec |
10. 查看确认版本
1 | ssh -V |
升级成功后关闭telnet服务
端口开放不安全
关闭自启动,关闭服务
1 | systemctl disable telnet.socket |
已安装 xinetd 服务才执行:
1 | systemctl disable xinetd.service |




