二、升级步骤
需要升级的服务器尽可能连通外网,因为涉及 zlib-devel、pam-devel、gcc、perl-core 等依赖包的安装。如果是纯内网环境,则需要提前在联网辅助机上下载好所有依赖包并上传到内网服务器后再进行操作。
1. 临时开启 Telnet(防止升级过程中 SSH 意外断开)
yum install -y telnet-server telnet
systemctl start telnet.socket
安全提醒:升级完成后请立即关闭并卸载 Telnet 服务,以防引入新的安全隐患。
systemctl stop telnet.socket
yum remove -y telnet-server
telnet
2. 确认升级前的 OpenSSH 版本
ssh -V
OpenSSH_10.2p1, OpenSSL 3.6.0 1 Oct 2025
3. 升级 OpenSSL
3.1 检查并备份旧 OpenSSL 相关文件
whereis openssl
openssl: /usr/bin/openssl /usr/lib64/openssl /usr/include/openssl /usr/local/openssl /usr/share/man/man1/openssl.1ssl.gz
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
mv /usr/local/openssl /usr/local/openssl.old
3.2 解压并编译安装
mkdir -p /data/updateSsl /data/updateSsh
tar xf openssl-4.0.0.tar.gz -C /data/updateSsl
tar xf openssh-10.3p1.tar.gz -C /data/updateSsh
cd /data/updateSsl/openssl-4.0.0
./config --prefix=/usr --shared && make && make install
如果遇到 AVX2 编译错误
某些旧款 CPU 不支持 AVX2 指令集,需更换编译参数:
cd /data/updateSsl/openssl-4.0.0
make distcleansed -i '/enc_b64_avx2.c/d' crypto/evp/build.info
./config -std=gnu99 no-asm
make -j$(nproc)make install
可能的问题:缺少 Perl 模块 IPC::Cmd
Can't locate IPC/Cmd.pm in @INC ...
原因:
OpenSSL 编译脚本依赖 Perl 模块 IPC::Cmd,系统未安装。
解决方案:
3.3 验证 OpenSSL 版本
openssl version
OpenSSL 4.0.0 1 Oct 2025
4. 升级 OpenSSH
4.1 备份旧 SSH 配置文件及目录
mv /etc/ssh/ /home/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
4.2 配置编译参数
cd /data/updateSsh/openssh-10.3p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords
./configure 仅做配置检查,确认依赖满足后即可进入下一步编译。若出现以下报错,按提示安装对应依赖:
configure: error: *** zlib.h missingyum install -y zlib-develconfigure: error: PAM headers not foundyum install -y pam-devel.x86_644.3 编译安装
4.4 复制启动脚本并调整配置
cp contrib/redhat/sshd.init /etc/init.d/sshd
echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
4.5 启动 SSHd 并配置开机自启
systemctl enable sshd
systemctl restart sshd
systemctl status sshd
4.6 验证升级结果
ssh -V
openssl versionssh localhostss -tlnp | grep :22
附:纯内网环境离线依赖下载方案
若目标服务器无法访问外网,可通过一台联网的辅助机提前下载所有 RPM 依赖包,再传输到内网安装。
在联网辅助机上操作
# 1. 安装 yum-utils(提供 repotrack 命令)yum install -y yum-utils 2. 下载 perl-core 及其所有依赖 mkdir -p /tmp/all_perl_rpms && cd /tmp/all_perl_rpms && repotrack perl-core 3. 下载 zlib-devel 及其所有依赖 mkdir -p /tmp/zlib-devel-pkgs && cd /tmp/zlib-devel-pkgs && repotrack zlib-devel 4. 下载 pam-devel 及其所有依赖 mkdir -p /tmp/pam-devel-pkgs && cd /tmp/pam-devel-pkgs && repotrack pam-devel 5. 打包 cd /tmptar -czf perl-core-pkgs.tar.gz all_perl_rpms/tar -czf zlib-devel-pkgs.tar.gz zlib-devel-pkgs/tar -czf pam-devel-pkgs.tar.gz pam-devel-pkgs/
将打包文件传输到内网目标机器后,在目标机器上操作:
# 解压cd /tmptar -xzf perl-core-pkgs.tar.gztar -xzf zlib-devel-pkgs.tar.gztar -xzf pam-devel-pkgs.tar.gz 清除代理环境变量,避免 yum 尝试联网 unset http_proxy https_proxy 安装 cd /tmp/all_perl_rpms && yum localinstall -y *.rpm
cd /tmp/zlib-devel-pkgs && yum localinstall -y *.rpm
cd /tmp/pam-devel-pkgs && yum localinstall -y *.rpm
repotrack 仅下载 RPM 包及其全量依赖,不会自动安装,非常适合离线环境使用。