!!!升级前必做三件事
* 开启 Telnet 备用通道(防止 SSH 断连后无法登录)
* 全量备份关键文件(方便失败时快速回滚)
* 通过 VNC 控制台操作(不要仅依赖 SSH 远程连接)
----------------------------------------------------------
第一步:开启 Telnet 备用通道
# 安装 Telnet 服务(如果离线源中有 telnet-server 包) yum install -y telnet-server telnet xinetd # 启动并设置开机自启 systemctl enable --now telnet.socket systemctl enable --now xinetd # 允许 root 通过 Telnet 登录 echo 'pts/0' >> /etc/securetty echo 'pts/1' >> /etc/securetty # 验证 Telnet 是否可用(在另一台机器上测试) # telnet 10.0.0.1 23
第二步:全量备份关键文件
# 创建备份目录 mkdir -p /root/backup_openssh # 备份二进制文件 cp /usr/bin/ssh /root/backup_openssh/ssh.bak cp /usr/sbin/sshd /root/backup_openssh/sshd.bak cp /usr/bin/openssl /root/backup_openssh/openssl.bak # 备份配置目录 cp -r /etc/ssh /root/backup_openssh/ssh_conf_backup cp /etc/pam.d/sshd /root/backup_openssh/sshd_pam.bak # 记录当前版本 ssh -V > /root/backup_openssh/version_before.txt openssl version >> /root/backup_openssh/version_before.txt
第三步:安装编译依赖
# 安装编译工具链和依赖库 yum groupinstall -y "Development Tools" yum install -y gcc make zlib-devel pam-devel perl-IPC-Cmd perl-Data-Dumper wget
第四步:编译安装 OpenSSL(aarch64 专用配置)
OpenSSH 10.4 依赖较新版本的 OpenSSL,需先升级 OpenSSL
# 下载 OpenSSL 源码 cd /usr/local/src wget https://www.openssl.org/source/openssl-3.4.2.tar.gz tar -xzf openssl-3.4.2.tar.gz cd openssl-3.4.2 # 配置(aarch64 架构必须使用 linux-aarch64) ./Configure linux-aarch64 \ --prefix=/usr/local/openssl-3.4.2 \ --openssldir=/usr/local/openssl-3.4.2 \ shared # 编译并安装 make -j$(nproc) make install # 添加动态库配置 echo "/usr/local/openssl-3.4.2/lib64" | tee /etc/ld.so.conf.d/openssl-3.4.2.conf ldconfig # 创建软链接(替换系统默认 openssl) mv /usr/bin/openssl /usr/bin/openssl.old ln -s /usr/local/openssl-3.4.2/bin/openssl /usr/bin/openssl ln -sf /usr/local/openssl-3.4.2/lib/libssl.so.3 /usr/lib64/libssl.so.3 ln -sf /usr/local/openssl-3.4.2/lib/libcrypto.so.3 /usr/lib64/libcrypto.so.3 # 验证 openssl version
第五步:编译安装 OpenSSH 10.4p1
# 下载 OpenSSH 源码 cd /usr/local/src wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.4p1.tar.gz tar -xzf openssh-10.4p1.tar.gz cd openssh-10.4p1 # 配置(指定 OpenSSL 路径,aarch64 无需额外架构参数) ./configure \ --prefix=/usr \ --sysconfdir=/etc/ssh \ --with-pam \ --with-zlib \ --with-ssl-dir=/usr/local/openssl-3.4.2 \ --with-md5-passwords \ --with-privsep-path=/var/lib/sshd # 编译并安装 make -j$(nproc) make install # 修复主机密钥权限(必须为 600,否则 sshd 无法启动) chmod 600 /etc/ssh/ssh_host_*_key
第六步:配置调整(OpenSSH 10.x 重要变更)
OpenSSH 10.0 及以上版本已移除 GSSAPI 支持,需从配置文件中删除相关行,否则 sshd 无法启动
# 删除 GSSAPI 相关配置 sed -i '/^GSSAPIAuthentication/d' /etc/ssh/sshd_config sed -i '/^GSSAPICleanupCredentials/d' /etc/ssh/sshd_config # 检查并恢复原有安全策略(如 PermitRootLogin、PasswordAuthentication) # 可根据需要手动编辑 /etc/ssh/sshd_config
第七步:重启服务并验证
# 重载 systemd 配置 systemctl daemon-reload # 重启 SSH 服务 systemctl restart sshd # 检查服务状态 systemctl status sshd # 验证版本 ssh -V openssl version
第八步:升级成功后清理
# 禁用 Telnet 服务 systemctl disable --now telnet.socket systemctl disable --now xinetd # 删除 /etc/securetty 中添加的 pts 行(可选)
回滚方案(升级失败时使用)
# 恢复二进制文件 cp /root/backup_openssh/ssh.bak /usr/bin/ssh cp /root/backup_openssh/sshd.bak /usr/sbin/sshd cp /root/backup_openssh/openssl.bak /usr/bin/openssl # 恢复配置目录 cp -r /root/backup_openssh/ssh_conf_backup/* /etc/ssh/ cp /root/backup_openssh/sshd_pam.bak /etc/pam.d/sshd # 恢复 OpenSSL 软链接 rm -f /usr/bin/openssl cp /root/backup_openssh/openssl.bak /usr/bin/openssl # 刷新动态库 ldconfig # 重启服务 systemctl daemon-reload systemctl restart sshd systemctl status sshd

这样就升级成功啦
注意事项:
1.如果离线安装telnet 可通过https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/base/aarch64/Packages/ 或者 https://update.cs2c.com.cn/NS/V10/V10SP3-2403/os/adv/lic/updates/aarch64/Packages/ 找到telnet-0.17-77.ky10.aarch64.rpm、xinetd-2.3.15-31.ky10.aarch64.rpm(或更高版本)
2.升级了新版本后,配置文件里可能还残留着旧版本甚至已经被彻底移除的废弃选项(因为验证版本后会有报错),需要检查一下
第145行:RSAAuthentication 已废弃(OpenSSH 7.0+ 废弃)
第147行:RhostsRSAAuthentication 已废弃(仅适用于 SSH 协议第1代)
第168行:GSSAPIKexAlgorithms 是错误配置(OpenSSH 10.x 已彻底移除 GSSAPI 支持)
vim /etc/ssh/sshd_config 注销掉上面三行
3.grep -n "GSSAPIKexAlgorithms" /etc/crypto-policies/back-ends/openssh.config
如果有输出,也注销掉
vim /etc/crypto-policies/back-ends/openssh.config
4.为了避免系统加密策略再次覆盖你的 sshd 配置,建议在 /etc/sysconfig/sshd 中取消加密策略的自动应用
vim /etc/sysconfig/sshd
找到 CRYPTO_POLICY= 这一行,取消注释(去掉行首的 #)
验证并重启
# 先验证配置是否正确(无输出即正确) /usr/sbin/sshd -t # 重启 sshd systemctl restart sshd # 检查状态 systemctl status sshd