CentOS 7 OpenSSH 10.2p1 升级全攻略(含离线安装与回退方案)

注意 :为了避免升级 SSH 时无法远程登录,建议先启用 Telnet 服务 作为备用连接方式。
CentOS 7 默认 OpenSSH 版本是 7.x ,升级到 10.2p1 需要 源码编译 ,并且优先升级 OpenSSL 3.x 使用,否则 TLS/加密算法可能受限。

下面给两个任选其一即可:

离线安装方法:先看第八步,执行完成以后再从「下载 OpenSSH 10.2p1 源码」开始操作。


一、安装并启用 Telnet 服务

1. 安装 Telnet 服务

bash 复制代码
yum install -y telnet-server telnet xinetd

2. 配置 Telnet

bash 复制代码
cat <<EOF > /etc/xinetd.d/telnet
service telnet
{
    flags           = REUSE
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/sbin/in.telnetd
    log_on_failure  += USERID
    disable         = no
}
EOF

3. 启动 xinetd 服务

默认 /etc/securetty 或 PAM 设置可能禁止 root 通过 Telnet 登录,建议提前创建普通用户并授权 sudo 权限。生产环境应避免 root 远程登录。

bash 复制代码
systemctl enable xinetd
systemctl start xinetd
systemctl status xinetd

4. 测试 Telnet

bash 复制代码
telnet 服务器IP
  • 使用系统账号密码登录
  • 即使 SSH 出问题,也能通过 Telnet 登录服务器

⚠️ 注意:Telnet 明文传输密码,只能在内网使用。SSH 升级完成后,应尽快关闭 Telnet。


二、准备工作

重要提醒:安装完成 SSH 服务并测试可以正常登录以后,一定要彻底关闭 Telnet 服务。

1. 确认系统版本

bash 复制代码
cat /etc/centos-release

示例输出:

复制代码
CentOS Linux release 7.9.2009

2. 查看当前 OpenSSH 版本

bash 复制代码
ssh -V

示例输出:

复制代码
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips

3. 安装编译依赖

bash 复制代码
yum groupinstall -y "Development Tools"
yum install -y wget curl gcc make zlib-devel pam-devel \
libselinux-devel openssl-devel bzip2 gcc-c++ libstdc++* libcap*

如果使用 OpenSSL 3.x,请确保先升级 OpenSSL(推荐路径 /usr/local/openssl-3.5.4)。


三、下载 OpenSSH 10.2p1 源码

bash 复制代码
cd /tmp
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.2p1.tar.gz
tar -zxvf openssh-10.2p1.tar.gz
cd openssh-10.2p1   ## 官方版本目录命名疑似问题

四、配置编译选项

建议:在开始安装前先打开至少三个终端窗口,保证卸载 SSH 服务以后可以继续操作。要是忘记打开也可以通过 Telnet 登录。

1. 备份并卸载默认 SSH

bash 复制代码
# 备份配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak-2026
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak-2026

# 卸载旧版 SSH
yum -y remove openssh

2. 配置源码编译

bash 复制代码
./configure \
  --prefix=/usr/local/openssh-10.2p1 \
  --sysconfdir=/etc/ssh \
  --with-ssl-dir=/usr/local/openssl-3.5.4 \
  --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 密码

五、编译与安装

bash 复制代码
# 编译
make -j$(nproc)

# 配置权限
chmod 600 /etc/ssh/ssh_host_*
chown root.root /etc/ssh/ssh_host_*

# 安装
make install
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd

# 配置允许 root 登录(根据需要)
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'UsePAM yes' >> /etc/ssh/sshd_config
mv /etc/pam.d/sshd.bak-2025 /etc/pam.d/sshd

# 创建软连接
ln -s /usr/local/openssh-10.2p1/sbin/sshd /usr/sbin/sshd
ln -s /usr/local/openssh-10.2p1/bin/ssh /usr/bin/ssh
ln -s /usr/local/openssh-10.2p1/bin/ssh-keygen /usr/bin/ssh-keygen
ln -s /usr/local/openssh-10.2p1/bin/ssh-keyscan /usr/bin/ssh-keyscan
ln -s /usr/local/openssh-10.2p1/bin/ssh-agent /usr/bin/ssh-agent
ln -s /usr/local/openssh-10.2p1/bin/scp /usr/bin/scp
ln -s /usr/local/openssh-10.2p1/bin/sftp /usr/bin/sftp
ln -s /usr/local/openssh-10.2p1/bin/ssh-add /usr/bin/ssh-add
cp contrib/ssh-copy-id /usr/bin/   # 此步骤再 openssh 编译目录操作
chmod +x /usr/bin/ssh-copy-id

六、启动 SSH 服务

bash 复制代码
systemctl daemon-reload
systemctl enable sshd
systemctl restart sshd
systemctl status sshd

七、验证升级

bash 复制代码
ssh -V

输出示例:

bash 复制代码
OpenSSH_10.2p1, OpenSSL 3.5.4 30 Sep 2025

检查 SSH 服务状态:

bash 复制代码
ss -tnlp | grep sshd

八、离线升级

1. 解压

bash 复制代码
# 依赖包中包含 telnet 服务和默认 SSH 7.4 服务,方便回退
unzip openssh.zip

2. 安装依赖包

bash 复制代码
cd openssh
yum localinstall -y *.rpm  ## 注意这个会安装所有依赖包,并且 telnet 服务也会安装上

安装完成后,从「下载 OpenSSH 10.0p2 源码」开始再次执行升级步骤即可。


九、回退操作

以测试机为例,只需要重新安装 openssh 服务即可:

bash 复制代码
## 离线安装包里有 ssh7.4 的包
cd openssh/openssh  ## 里面有三个包,全部安装即可
yum localinstall -y *.rpm

## 重启 ssh 服务
systemctl daemon-reload
systemctl enable sshd
systemctl restart sshd
systemctl status sshd

十、关闭 Telnet 服务

1. 停止 Telnet 服务

bash 复制代码
systemctl stop xinetd
  • Telnet 是由 xinetd 管理的,所以停止 xinetd 就会停止所有通过它启动的服务,包括 Telnet。

2. 禁止开机自启

bash 复制代码
systemctl disable xinetd
  • 确保服务器重启后 Telnet 不会自动启动。

3. 删除或禁用 Telnet 配置文件(可选)

bash 复制代码
mv /etc/xinetd.d/telnet /etc/xinetd.d/telnet.disabled
  • 这样即使 xinetd 启动,也不会加载 Telnet 服务。

4. 验证 Telnet 是否关闭

bash 复制代码
telnet 127.0.0.1
  • 如果提示 Connection refused 或无法连接,说明已经彻底关闭。

总结

本文详细介绍了 CentOS 7 系统升级 OpenSSH 到 10.0p2 版本的完整步骤,包括:

  1. 备用连接:通过 Telnet 服务确保升级过程中不会失去远程连接
  2. 升级流程:从准备工作、源码下载、编译安装到服务启动的完整步骤
  3. 离线升级:提供了离线安装包,方便无网络环境使用
  4. 回退方案:详细的回退步骤,确保在升级失败时可以快速恢复
  5. 安全加固:升级完成后彻底关闭 Telnet 服务,保障系统安全

通过本文的步骤,您可以安全、可靠地将 CentOS 7 系统的 OpenSSH 升级到最新版本,提升系统安全性和稳定性。

温馨提示:操作前请务必备份重要数据,建议在测试环境中先进行演练,确保熟悉整个流程后再在生产环境中操作。

相关推荐
陈希1232 分钟前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡37 分钟前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
@兽血沸腾1 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
且从容.4 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道4 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达6 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.7 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨9 小时前
WSL2的安装与使用
linux·wsl
微小的鱼9 小时前
Linux的渲染与显示系统链路
android·java·linux