最近服务器扫除漏洞,openssl和openssh的版本过低导致,该篇文章记录升级过程和升级过程中安装包的下载地址;
注意:因为我的服务器有系统盘备份,升级崩了可以恢复,在升级之前请看文章第七点,
一定看 一定看 一定看 一定看 一定看 一定看 一定看 一定看 一定看 一定看 一定看 一定看
1、OpenSSL 3.0.19
官网主页:https://www.openssl.org/source/ 直接下载链接:
https://www.openssl.org/source/openssl-3.0.19.tar.gz
2、OpenSSH 10.3p1(Portable Linux 适配版,带 p 后缀)
官方便携版主页:https://www.openssh.com/portable.html 直接下载链接:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.3p1.tar.gz
3、依赖安装包
为了不到处下载依赖,我将依赖打包到一个文件夹中,上传后解压
依赖包等我升级完其他服务器再回来补
然后再依赖包目录下执行:
rpm -Uvh *.rpm --nodeps
4、升级openssl
bash
tar -zxvf openssl-3.0.19.tar.gz
cd openssl-3.0.19
# 配置编译:安装路径+动态库支持
./config --prefix=/usr/local/openssl3 shared zlib
# 编译
make
make install
# 配置系统动态库
echo "/usr/local/openssl3/lib64" >> /etc/ld.so.conf
ldconfig
# 替换系统openssl软链接
mv /usr/bin/openssl /usr/bin/openssl.old
ln -s /usr/local/openssl3/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl3/lib64/libssl.so.3 /usr/lib64/libssl.so.3
ln -s /usr/local/openssl3/lib64/libcrypto.so.3 /usr/lib64/libcrypto.so.3
# 验证新版本
openssl version
# 输出应显示:OpenSSL 3.0.19 31 Jan 2026 (Library: OpenSSL 3.0.19 31 Jan 2026)
5、升级openssh
bash
tar -zxvf openssh-10.3p1.tar.gz
cd openssh-10.3p1
# 编译配置(关键参数:绑定新OpenSSL、启用PAM、系统路径适配麒麟)
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-pam \
--with-zlib \
--with-ssl-dir=/usr/local/openssl3 \
--with-privsep-path=/var/lib/sshd
make -j$(nproc)
make install
# 修复SSH主机密钥权限
chmod 600 /etc/ssh/ssh_host_*_key
# 清理旧版废弃GSSAPI配置(新版不兼容,会启动失败)
sed -i '/^GSSAPIAuthentication/d' /etc/ssh/sshd_config
sed -i '/^GSSAPICleanupCredentials/d' /etc/ssh/sshd_config
# 兼容老旧客户端(避免rsa算法拒绝连接)
echo "PubkeyAcceptedKeyTypes +ssh-rsa" >> /etc/ssh/sshd_config
echo "HostKeyAlgorithms +ssh-rsa" >> /etc/ssh/sshd_config
echo "KexAlgorithms +diffie-hellman-group1-sha1" >> /etc/ssh/sshd_config
6、重启 sshd、校验升级结果
bash
# 检查sshd配置语法(报错不要重启)
sshd -t
# 重载systemd,重启服务
systemctl daemon-reload
systemctl restart sshd
systemctl enable sshd
# 查看新版本
ssh -V
# 正常输出示例:OpenSSH_10.3p1, OpenSSL 3.0.19 31 Jan 2026
# 查看服务状态
systemctl status sshd
7、关键注意点(升级前必做)
此处 是关键 是关键 是关键 是关键 是关键 是关键 是关键 是关键
1 、备份原有 SSH 全部文件(回滚救命)
bash
# 二进制程序备份
cp /usr/bin/ssh /usr/bin/ssh.bak
cp /usr/sbin/sshd /usr/sbin/sshd.bak
# 配置目录整体备份
cp -r /etc/ssh /etc/ssh.bak.$(date +%Y%m%d)
# PAM、systemd文件备份
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
cp /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
2、打开两个终端窗口,并且升级过程不要关闭(必须做必须做)
3、开启 Telnet 兜底通道(升级失败应急登录)
bash
yum install telnet-server telnet xinetd -y
systemctl enable --now telnet.socket
# 防火墙放行23端口
firewall-cmd --add-port=23/tcp --permanent
firewall-cmd --reload
# 允许root telnet登录
echo "pts/0" >> /etc/securetty
4、异常回滚方案(升级失败无法 SSH 时,Telnet 登录执行)
bash
# 恢复ssh二进制
mv /usr/bin/ssh.bak /usr/bin/ssh
mv /usr/sbin/sshd.bak /usr/sbin/sshd
# 恢复配置目录
rm -rf /etc/ssh && mv /etc/ssh.bak.* /etc/ssh
# 恢复PAM配置
mv /etc/pam.d/sshd.bak /etc/pam.d/sshd
# 恢复系统openssl
mv /usr/bin/openssl.old /usr/bin/openssl
ldconfig
# 重启服务
systemctl restart sshd
最后,希望大家升级顺顺利利