💡 注意:为了避免升级 SSH 时无法远程登录,建议先启用 Telnet 服务 作为备用连接方式。 CentOS 7 默认 OpenSSH 版本是 7.x,升级到 10.3p1 需要 源码编译,并且优先升级 OpenSSL 3.x 使用,否则 TLS/加密算法可能受限。
OpenSSL 升级参考:
CentOS 7/麒麟V10 升级 OpenSSL 3.6.1 完整指南
其他版本OpenSSH 升级参考:
CentOS 7 升级 OpenSSH 10.0p2 完整教程(含 Telnet 备份)
CentOS 7 OpenSSH 10.2p1 升级全攻略(含离线安装与回退方案)
OpenSSH 10.2p1一键升级脚本(可 ansible 批量升级)
本教程主要针对 CentOS 7 和 Kylin Linux V10 系统编写,但以下 Linux 发行版也可参考本教程进行 OpenSSL 升级,可能有区别的地方是安装依赖那块:
| CentOS 8 / RHEL 8 | dnf 代替 yum |
| Ubuntu 18.04+ / Debian 10+ | apt,编译步骤相同 |
| Fedora 30+ | dnf 安装依赖,编译步骤相同 |
| openEuler 20.03+ | |
| SUSE Linux Enterprise Server | zypper,编译步骤相同 |
💡 💡 提示:不同发行版的依赖包名称可能略有差异,安装依赖时请根据实际情况调整命令。
yum install -y telnet-server telnet xinetdcat <<EOF > /etc/xinetd.d/telnetservice telnet{ flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no}EOF💡 默认
/etc/securetty或 PAM 设置可能禁止 root 通过 Telnet 登录,建议提前创建普通用户并授权 sudo 权限。生产环境应避免 root 远程登录。
systemctl enable xinetdsystemctl start xinetdsystemctl status xinetdtelnet 服务器IP💡 ⚠️ 注意:Telnet 明文传输密码,只能在内网使用。SSH 升级完成后,应尽快关闭 Telnet。
💡 重要提醒:安装完成 SSH 服务并测试可以正常登录以后,一定要彻底关闭 Telnet 服务。
cat /etc/centos-release示例输出:
CentOS Linux release 7.9.2009ssh -V示例输出:
OpenSSH_7.4p1, OpenSSL 1.0.2k-fipsyum groupinstall -y "Development Tools"yum install -y wget curl gcc make zlib-devel pam-devel \libselinux-devel bzip2 gcc-c++ libstdc++* libcap*💡 如果使用 OpenSSL 3.x,请确保先升级 OpenSSL(推荐路径
/usr/local/openssl-3.6.1)。
cd /tmpwget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.3p1.tar.gztar -zxvf openssh-10.3p1.tar.gzcd openssh-10.3p1 ## 官方版本目录命名疑似问题💡 建议:在开始安装前先打开至少三个终端窗口,保证卸载 SSH 服务以后可以继续操作。要是忘记打开也可以通过 Telnet 登录。
# 备份配置cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak-2026cp /etc/pam.d/sshd /etc/pam.d/sshd.bak-2026# 卸载旧版 SSHyum -y remove openssh./configure \ --prefix=/usr/local/openssh-10.3p1 \ --sysconfdir=/etc/ssh \ --with-ssl-dir=/usr/local/openssl-3.6.1 \ --with-zlib \ --with-pam \ --with-privsep-path=/var/lib/sshd \ --with-md5-passwords参数说明:
--prefix:安装目录--sysconfdir:配置文件路径--with-ssl-dir:OpenSSL 目录--with-zlib:启用压缩--with-pam:启用 PAM 认证--with-privsep-path:特权分离目录--with-md5-passwords:兼容 MD5 密码# 编译make -j$(nproc)# 配置权限chmod 600 /etc/ssh/ssh_host_*chown root.root /etc/ssh/ssh_host_*# 安装make installcp -p contrib/redhat/sshd.init /etc/init.d/sshdchmod +x /etc/init.d/sshd# 配置允许 root 登录(根据需要)echo'PermitRootLogin yes' >> /etc/ssh/sshd_configecho'UsePAM yes' >> /etc/ssh/sshd_configmv /etc/pam.d/sshd.bak-2026 /etc/pam.d/sshd# 创建软连接ln -s /usr/local/openssh-10.3p1/sbin/sshd /usr/sbin/sshdln -s /usr/local/openssh-10.3p1/bin/ssh /usr/bin/sshln -s /usr/local/openssh-10.3p1/bin/ssh-keygen /usr/bin/ssh-keygenln -s /usr/local/openssh-10.3p1/bin/ssh-keyscan /usr/bin/ssh-keyscanln -s /usr/local/openssh-10.3p1/bin/ssh-agent /usr/bin/ssh-agentln -s /usr/local/openssh-10.3p1/bin/scp /usr/bin/scpln -s /usr/local/openssh-10.3p1/bin/sftp /usr/bin/sftpln -s /usr/local/openssh-10.3p1/bin/ssh-add /usr/bin/ssh-addcp contrib/ssh-copy-id /usr/bin/ # 此步骤再 openssh 编译目录操作chmod +x /usr/bin/ssh-copy-idsystemctl daemon-reloadsystemctl enable sshdsystemctl restart sshdsystemctl status sshdssh -V输出示例:
OpenSSH_10.3p1, OpenSSL 3.6.1 27 Jan 2026检查 SSH 服务状态:
ss -tnlp | grep sshd注意:离线安装包只有centos7系统的,麒麟系统需要自己下载。
百度网盘下载:https://pan.baidu.com/s/1z7Zw9YRXrCfroGFN_rWYBw?pwd=i23q
i23q # 依赖包中包含 telnet 服务和默认 SSH 7.4 服务,方便回退unzip openssh.zipcd opensshyum localinstall -y *.rpm ## 注意这个会安装所有依赖包,并且 telnet 服务也会安装上💡 安装完成后,从「下载 OpenSSH 10.3p1 源码」开始再次执行升级步骤即可。
以测试机为例,只需要重新安装 openssh 服务即可:
## 离线安装包里有 ssh7.4 的包cd openssh/openssh ## 里面有三个包,全部安装即可yum localinstall -y *.rpm## 重启 ssh 服务systemctl daemon-reloadsystemctl enable sshdsystemctl restart sshdsystemctl status sshdsystemctl stop xinetdxinetd 管理的,所以停止 xinetd 就会停止所有通过它启动的服务,包括 Telnet。systemctl disable xinetdmv /etc/xinetd.d/telnet /etc/xinetd.d/telnet.disabledxinetd 启动,也不会加载 Telnet 服务。telnet 127.0.0.1Connection refused 或无法连接,说明已经彻底关闭。本文详细介绍了 CentOS 7 系统升级 OpenSSH 到 10.3p1 版本的完整步骤,包括:
通过本文的步骤,您可以安全、可靠地将 CentOS 7 系统的 OpenSSH 升级到最新版本,提升系统安全性和稳定性。
温馨提示:操作前请务必备份重要数据,建议在测试环境中先进行演练,确保熟悉整个流程后再在生产环境中操作。